Notice
Recent Posts
Recent Comments
Data Analysis for Investment & Control
C++ dll의 CLR 프로젝트(C++/CLI)의 사용(3) 본문
반응형
:: 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# 프로젝트 속성 설정 페이지를 열고 위치를 새로 지정해야 한다.
반응형
'Code > C++:C#:MFC' 카테고리의 다른 글
[C++/STL] 디렉토리 내 파일 리스트 얻어오는 함수 (0) | 2016.01.13 |
---|---|
[Tip] DLL에서 다이얼로그 사용 시, 다이얼로그 창이 뜨지 않는 문제 (0) | 2015.05.18 |
[Tip] LPCWSTR(유니코드) <-> LPCSTR(멀티바이트) 쉽게 변환하기 (0) | 2015.05.18 |
C++ dll의 CLR 프로젝트(C++/CLI)의 사용(2) (0) | 2014.04.18 |
C++ dll의 CLR 프로젝트(C++/CLI)의 사용(1) (0) | 2014.04.17 |
Comments