LoadLibrary()
을 사용하여 동적으로 DLL을로드하려고하는데, 호출하려고하는 DLL에서 함수의 주소를 가져올 수 없습니다.왜 내 DLL 함수에 액세스 할 수 없습니까?
DLL 기능 : (CPP 파일)
_declspec(dllexport) void MyDllFunc()
{
printf("Hello from DLL");
}
호출 코드 :
typedef void (*MyDllFuncPtr)();
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE LoadMe;
LPCWSTR str = L"C:\\Users\\Tony\\Documents\\Visual Studio 2008\\Projects\\DLL Loading\\Release\\MyDll.dll";
LoadMe = LoadLibrary(str);
if(LoadMe != 0)
printf("Successfully Loaded!\r\n");
else
printf("Loading Failed \r\n");
MyDllFuncPtr func;
func = (MyDllFuncPtr)GetProcAddress(LoadMe, "MyDllFunc");
if (func != NULL)
func();
FreeLibrary(LoadMe);
}
FUNC NULL을 반환!
내가 뭘 잘못하고 있니?
이것은 Win32 콘솔 프로젝트입니다.
dll이 C++로 작성 되었다면 C++ 이름을 mangeling과 일치시켜야합니다. 내보내기 테이블을보고 함수 이름을 살펴보십시오. 또는 dll에서 extern C로 함수를 선언하십시오.이 함수는 C++ 이름 mangeling을 제거합니다. DLL 또는 코드에서 –