当我们附加exe
或dll
和static library
时,我们可以使用extern
关键字访问静态库的variables
和/或来自functions
或exe
的{{1}}。为了简单起见,我们假设有一个dll
和一个exe
。
我要做的是从lib
调用exe
的函数。
可执行代码
lib
静态链接库代码
void doSomething() {
// do something here
}
反之亦然,但我想知道这是否可以像void onSomeEvent() {
doSomething(); // call doSomething() here
}
关键字那样完成。或者最好的方法是什么?
我想到的是将extern
(例如function pointer
)传递给void*
中的functions
/ methods
之一(可能是一个类构造函数)。我认为这应该可以工作,但我不想太多地触摸库的代码,因为库不是我的,可以用更新的版本替换。我可以添加/删除几行代码,但我想防止更改功能接口。
什么是更好方式?
答案 0 :(得分:4)
您也可以在功能之外声明它,您可能还需要其他功能。
void doSomething(); // declares the function
void onSomeEvent()
{
doSomething(); // call doSomething() here
}
void onSomeEvent2()
{
doSomething(); // call doSomething() here
}
答案 1 :(得分:2)
当然,您只需要在库中声明该函数。
void onSomeEvent() {
void doSomething(); // declares the function
doSomething(); // call doSomething() here
}
答案 2 :(得分:1)
鉴于静态库(可能)意图在许多不同的程序中使用,使用回调方法并不罕见,其中exe初始化库并将一个或多个函数指针传递给用来执行操作(如日志记录)消息,或其他)。如果exe没有传入函数指针(或将它们作为NULL
传递),那么库就不能调用这些函数,并且库在两种环境中都能很好地工作。
这比 更好,假设函数总是在exe中定义。