试图以相反的顺序使用extern
Trying to use extern in reverse order
当我们有一个exe
或dll
和一个static library
附着在它上面时,我们可以使用extern
关键字从exe
或dll
访问静态库的variables
和/或functions
。为了使事情更简单,让我们假设我们有一个exe
和一个lib
连接到它。
我想做的是从lib
调用exe
的函数。
void doSomething() {
// do something here
}
静态链接库代码
void onSomeEvent() {
doSomething(); // call doSomething() here
}
反之亦然很容易,但我想知道这是否可以像extern
关键字一样完成。或者最好的方法是什么?
我想到的是将function pointer
(如void*
)传递给lib
中的functions
/methods
之一(可能是类构造函数)。我认为这应该工作,但我不想触摸库的代码太多,因为库不是我的,可以用更新的版本替换。我可以添加/删除几行代码,但我想防止改变函数接口。
更好的方式是什么?
您也可以在函数外声明它,您可能有其他函数需要它。
void doSomething(); // declares the function
void onSomeEvent()
{
doSomething(); // call doSomething() here
}
void onSomeEvent2()
{
doSomething(); // call doSomething() here
}
当然,您只需要在库中声明函数。
void onSomeEvent() {
void doSomething(); // declares the function
doSomething(); // call doSomething() here
}
给定静态库(可能)意味着在许多不同的程序中使用,使用回调方法并不罕见,其中exe初始化库并将其传递一个或多个函数指针用于做事情(如日志消息,或其他)。如果exe不传递函数指针(或将它们作为NULL
传递),则库可以简单地不调用这些函数,并且库将在两个环境中正常工作。
这比假设函数总是在exe中定义要好得多。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为什么在全局范围内使用"extern int a"似乎不行?
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- 优先顺序:智能指针和类析构函数
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- 如何使用extern类
- QML按钮点击功能执行顺序
- C++中数据类型修饰符的顺序
- 当比特(而不是字节)的顺序至关重要时的持久性
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 通过选项卡的文本设置QTabWidget顺序
- c++11评估顺序(未定义的行为)
- 如何在C++中递归地按相反顺序打印集合
- 给定顺序中的事件处理
- 试图以相反的顺序使用extern