Data Analysis for Investment & Control

C++ dll의 CLR 프로젝트(C++/CLI)의 사용(3) 본문

Code/C++:C#:MFC

C++ dll의 CLR 프로젝트(C++/CLI)의 사용(3)

아슈람 2014. 4. 20. 22:56
반응형

 

:: Interface를 더 elegant 하게...

Native Code인 C++ dll과 C#을 연동시키는데 feasibility를 보는 것에 급급하다 보니, 구현된 코드가 세련되지 못하다.

우선, C++ dll의 LoadLibrary 부분의 기존 코드를 보면, 

 

unmanangedLib = LoadLibrary(TEXT( "D:\\Work\\11. P3Suite\\P3Strategist\\Debug\\P3Core.dll"));

DLL 경로가 하드 코딩되어 있다!! 이걸 실행 파일이 위치하는 경로에서 읽어 오도록 수정하자.

     // link unmanaged class
     wchar_t path[MAX_PATH];

     GetCurrentDirectory(MAX_PATH, path);

     std::wstring str_path(path);
     str_path = str_path + L "\\P3IF.dll";
     unmanagedLib = LoadLibrary(str_path.c_str());

     // assign native method interface pointer
     vfpSetCmd = ( int(*)(int ))GetProcAddress(unmanagedLib, "SetCmd");
     vfpInit = ( void(*)(void ))GetProcAddress(unmanagedLib, "Init");
     vfpGetRefCmdSize = ( unsigned int(*)(void ))GetProcAddress(unmanagedLib, "GetRefCmdSize");
 
위의 GetCurrentDirectory(MAX_PATH, path)를 수행하면, 리턴되는 경로는 dll이 위치한 경로와 다르다. 솔루션의 프로젝트 메인이 C# 프로젝트라서, proj_name\bin\debug... 의 경로에 exe 파일이 존재하기 때문이다.
따라서, 솔루션의 debug 경로에 위치를 지정하기 위해서는 C# 프로젝트 속성 설정 페이지를 열고 위치를 새로 지정해야 한다.

 

 

 

반응형
Comments