演示了一下DLL的封装和载入,但是在GetProcAddress的时候,得到的地址老是0,不知道为什么,哪位达人给指点一下,先谢谢了啊!
//testDll2.h
#define EXPORT extern "C"
EXPORT int WINAPI test();//testDll2.cpp
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}EXPORT int WINAPI test()
{
cout<<"ok"<<endl;
return 1;
}//testDll2.def
library "testDll2.dll"
DESCRIPTOIN "FDS"
EXPORTS
test @1//TEST.CPP
typedef int (WINAPI * TEST) ();
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hLibrary;
TEST ptest;
hLibrary = LoadLibrary(TEXT("testDll2.dll"));
ptest = (TEST) GetProcAddressA(hLibrary,_T("test"));
}
//testDll2.h
#define EXPORT extern "C"
EXPORT int WINAPI test();//testDll2.cpp
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}EXPORT int WINAPI test()
{
cout<<"ok"<<endl;
return 1;
}//testDll2.def
library "testDll2.dll"
DESCRIPTOIN "FDS"
EXPORTS
test @1//TEST.CPP
typedef int (WINAPI * TEST) ();
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hLibrary;
TEST ptest;
hLibrary = LoadLibrary(TEXT("testDll2.dll"));
ptest = (TEST) GetProcAddressA(hLibrary,_T("test"));
}
如果hLibrary这个不是空,那就是你的导出函数有问题。
写程序出了问题要保持冷静的心态,不要烦躁,这样就可以一步一步的把问题找出来。(自己的一点体会)
你要检查一下编译和连接的参数。
还有,就是要确保LoadLibrary装入的是正确的DLL。如果你硬盘上有多个DLL,有可能装错。
你可以是一下用绝对路径。
Depands在你的Visual Studio的 Tools里面
to:nelsonc,我编译和连接一直都是用VS的IDE的,不知道针对DLL,编译和连接的参数应该怎么调整呢?
to:darkread,我用的是vs.net,好象找不到depands?