1

我有两个基础项目。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();}

Test.lib

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

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

但是我现在想保留Proj1.libProj2.exe修复它们除了 new 之外不会编译Test.lib 如何做到这一点,

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

请帮我。

4

1 回答 1

2

您将需要构建动态链接库 (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;
}
于 2013-10-11T09:34:55.537 回答