gpt4 book ai didi

c++ - 如何在运行时 C++ 中包含头文件和函数?

转载 作者:行者123 更新时间:2023-11-30 04:13:40 25 4
gpt4 key购买 nike

我有两个基础项目。 Proj1.libProj2.exe。现在 Proj2.exe 是启动项目,它将调用 Proj1.lib。现在我要将另一个 Test.lib 添加到我的主项目中,其中包含 Gtest。现在,要使 Gtest 将所有测试用例累积到 GTest 中,我们需要从 Test.lib 中调用一个函数,该函数名和Proj2.exe 中需要包含头文件。然后 Proj.exe 将被编译,然后它会编译 Test.lib 然后它会执行测试用例。但是现在我的要求是不要打扰Proj2.exe。当我需要时,我将附加/解除Test.libTest2.lib ... 等等。

下面将展示我们目前是如何做到的。

Proj1.lib

x.c file
y.c file {/*App_Main_function()*/}

Proj2.exe

A.cpp
B.cpp file {/*Call App_Main_function();*/}
AttachTest.cpp {Test_Main();}

测试.lib

Test.cpp
{
TestMain()
{/*Body*/
InitilizeGoogleTest();
TEST_F(abc, ab)
{}
}
}

如果明天会有更多或新的测试库,那么我必须从 Proj.exe 打开 AttachTest.cpp 文件并添加函数名称和头文件名称。然后 Proj2.exe 将再次编译。

但我现在要保留 Proj1.libProj2.exe 修复它们无法编译,除了新的 Test.lib如何做到这一点,

我想到了一种方法,我将拥有 .xml 文件,其中将包含函数名称。在 Proj2.exe 中,我将拥有函数指针,它将在运行时调用它们。但是如何包含头文件呢??

请帮帮我。

最佳答案

您需要构建动态链接库 (DLL) 来执行您想要的操作。 .lib 库不能动态加载。

下面是一些如何使用此类库的示例代码,来自 Wikipedia :

#include <windows.h>
#include <stdio.h>

// DLL function signature
typedef double (*importFunction)(double, double);

int main(int argc, char **argv)
{
importFunction addNumbers;
double result;
HINSTANCE hinstLib;

// Load DLL file
hinstLib = LoadLibrary(TEXT("Example.dll"));
if (hinstLib == NULL) {
printf("ERROR: unable to load DLL\n");
return 1;
}

// Get function pointer
addNumbers = GetProcAddress(hinstLib, "AddNumbers");
if (addNumbers == NULL) {
printf("ERROR: unable to find DLL function\n");
FreeLibrary(hinstLib);
return 1;
}

// Call function.
result = addNumbers(1, 2);

// Unload DLL file
FreeLibrary(hinstLib);

// Display result
printf("The result was: %f\n", result);

return 0;
}

关于c++ - 如何在运行时 C++ 中包含头文件和函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com