从库函数调用应用程序函数是否正确?

时间:2016-06-16 09:13:28

标签: c++ shared-libraries

我们有一个应用程序,主要由3个主要模块组成。

现在我被指示将我的应用程序的3个模块更改为3个动态库。此活动背后的原因是,其中一个模块的任何更改都不会影响其他模块的发布周期。

直到现在它对我有好处。

但问题是库文件需要应用程序中的某些功能(可执行文件)。

所以他们从库文件中调用应用程序中写入的函数。 我无法消化这个,因为应用程序可以调用库,但库可以调用应用程序。

由于这是我们的内部库,我们可以像其他人一样建议吗?

2 个答案:

答案 0 :(得分:2)

您可以从库中获取SetCallback类型的函数,并使用函数指针。你从可执行文件中调用它,传递可执行文件中可用的函数指针。该库将记录该函数的地址,稍后将调用它。

<强> EXE:

void CallMe(int param);

...
SetCallback(Callme);

<强>库

void(*func_in_exe)(int);

void SetCallback(void(*pf)(int))
{
    func_in_exe = pf;    
}

void SomeLibraryFunction()
{
if (func_in_exe != NULL)
   (*func_in_exe)(100);
}

SetCallback期望类型为void (*)(int)的函数指针。此函数将更新相同类型的全局/静态变量。

如果您有最新的C ++编译器,可以将其包装在std::function对象中,也可以简化函数指针语法。

答案 1 :(得分:1)

您需要回电功能。

在库中创建一个函数,它将函数指针作为参数。然后,应用程序应该调用此库函数并将指针传递给库可以存储的函数,以便稍后调用。