试图以相反的顺序使用extern

时间:2011-11-21 14:35:23

标签: c++ c static-linking extern

当我们附加exedllstatic library时,我们可以使用extern关键字访问静态库的variables和/或来自functionsexe的{​​{1}}。为了简单起见,我们假设有一个dll和一个exe

我要做的是从lib调用exe的函数。

可执行代码

lib

静态链接库代码

void doSomething() {
    // do something here
}

反之亦然,但我想知道这是否可以像void onSomeEvent() { doSomething(); // call doSomething() here } 关键字那样完成。或者最好的方法是什么?

我想到的是将extern(例如function pointer)传递给void*中的functions / methods之一(可能是一个类构造函数)。我认为这应该可以工作,但我不想太多地触摸库的代码,因为库不是我的,可以用更新的版本替换。我可以添加/删除几行代码,但我想防止更改功能接口。

什么是更好方式?

3 个答案:

答案 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中定义。