
Debug 상태에서 모든 기능을 완성하고 테스트까지 다 마추었는데 release상태에서 빌드 하니까 함수들을 앱에서 불러오지 못합니다. 왜 이러는지는 모르겠습니다. Dumpbin을 사용해서 확인해도 release 빌드는 함수가 안 나오고 Debug빌드에서는 잘 나옵니다. 그렇다고 Debug버전의 dll을 release버전 앱에 넣을 수 는 없기에 방법을 찾은 결과 .def 파일을 알게 되었다. 원래 되야하는데 함수가 안 나오니까 .def파일로 함수를 부를 수 있게 했다.
.def 파일 (Modulce Definition File)은 c/c++로 DLL파일(동적 라이브러리)을 만들었을때 내보낼 함수, 변수, 심벌을 명시적으로 지정해주는 텍스트 파일이다. 기본적으로 c/c++에서 __declspec(dllexport)로 함수를 외부로 불러낼 수 있지만 .def파일을 사용하면 내보내는 이름, 순서, 변수들을 제어할 수 있습니다.
LIBRARY "DllFileName"
EXPORTS
function1
function2
function3
funciton4
extern "C" int insideFunction(int a){return a+2;}
LIBRARY "DllFileName"
EXPORTS
OUTSIDEfunction=insideFunction
외부에서는 OUTSIDEfunction으로 보이지만 내부에서는 insideFunction으로 구현되어 있다.
extern "C" int GlobalVariable = 0;
LIBRARY "DllFileName"
EXPORTS
GlobalVariable DATA
전역변수 내고낼때 옆에 DATA키워드 필수다.
LIBRARY "DllFileName"
EXPORTS
function1 @1
function2 @2
function3 @3
funciton4 @4
HMODULE hDll = LoadLibraryA("dllfile.dll");
GetProcAddress(hModule, (LPCSTR)1);