2016-10-05 10 views
1

DLL을로드 할 응용 프로그램에서 사용할 함수 인수를 내보낼 DLL을 만듭니다. 이 시점에서DLL - 함수 인수를 내보내는 방법?

내 진행은 다음과 같습니다 : 나는 기능을 내보낼 수있는 방법

class PlayerAPI { 
public: 
    PlayerAPI() {} 
    void SetPlayerPosition(float x, float y, float z); 
}; 

class WorldAPI { 
public: 
    WorldAPI() {} 
    void Print(std::string message); 
}; 

class API { 
    API() {} 
public: 
    static API & Get() 
    { 
     static API instance; 
     return instance; 
    } 
    PlayerAPI player; 
    WorldAPI world; 
}; 

__declspec(dllexport) void OnModuleLoad(API * api) { 
    api->world.Print("Test module loaded"); 
} 

는 DLL을로드하는 응용 프로그램에 사용되는 호출? 기본적으로 앱은 api->world.Print("Test module loaded");을 응답으로 받아야합니다.이 앱은 OnModuleLoad에서 사용하고 명령을 단독으로 수행합니다.

답변

0

일반적으로 DLL을 컴파일하고 클라이언트 측에서 모든 기능을 가져올 때 함수를 내보내는 매크로를 만들고 있습니다. 헤더에 다음과 같이 표시됩니다.

#ifdef DLL_EXPORT 
#define MyApi __declspec(dllexport) 
#elseif 
#define MyApi __declspec(dllimport) 
#endif 

이제 이것을 헤더에 넣으십시오. DLL 프로젝트의 전 처리기 설정에서 DLL_EXPORT를 정의해야합니다.

이 매크로를 사용하면 전체 클래스 또는 일부 클래스의 일부만 내보낼 수 있습니다.

클라이언트 측에서는 DLL의 .obj 파일과 연결해야합니다. DLL은 광범위한 주제이며 특정 주제에 대해 더 자세한 정보를 원할 경우 명확하게 알려주십시오.

+0

DLL을 사용할 응용 프로그램에서 사용할 인수로 함수를 전달해야합니다. DLL에는 가상 API가 있으며, 애플리케이션에는 전체 API가 있습니다. –