1

두 개의 기본 프로젝트가 있습니다. Proj1.libProj2.exe. 이제 Proj2.exe은 시작 프로젝트이며 Proj1.lib을 호출합니다. 이제 Test.lib을 주 프로젝트에 추가합니다 (Gtest 포함). 이제 Gtest을 모든 테스트 사례를 GTest에 누적 시키려면 함수를 Test.lib에서 호출해야하며 그 함수 이름과 헤더 파일은 Proj2.exe에 포함되어야합니다. 그러면 Proj.exe이 컴파일되어 Test.lib으로 컴파일되고 테스트 케이스가 실행됩니다. 하지만 지금 내 requiremnet는 방해하지 않아야합니다 Proj2.exe. 내가 원하면 언제든지 Test.lib 또는 Test2.lib 등을 첨부 할 것입니다.런타임시 headefile 및 함수를 포함하는 방법 C++?

다음은 현재 어떻게 수행 중인지 보여줍니다.

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) 
     {} 
    } 
} 

내일 내가 Proj.exe에서 AttachTest.cpp 파일을 열 필요가 다음 더 많거나 새로운 테스트 라이브러리가있을 것입니다 경우 함수 이름과 헤더 파일 이름을 추가하십시오. 그러면 Proj2.exe가 다시 컴파일됩니다.

는하지만 난 .xml 파일이있을 것이다, 나는 그들이 그렇게하는 방법 Test.lib 새로운 제외하고 컴파일되지 않습니다 Proj1.libProj2.exe 수정,

내가 그것을 할 수있는 방법의 생각을 유지합니다 지금 원하는 함수 이름을 갖습니다. Proj2.exe에는 런타임에 함수 포인터를 호출합니다. 그러나 어떻게 헤더 파일을 포함 시키는가 ??

도와주세요.

+1

: Wikipedia에서 같은 라이브러리를 사용하는 방법 몇 가지 예제 코드 아래

. –

답변

1

원하는 작업을 수행하려면 동적 연결 라이브러리 (DLL)를 만들어야합니다. .lib 라이브러리를 동적으로로드 할 수 없습니다. 당신은 DLL을 사용할 필요가

#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; 
} 
관련 문제