首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

DLL显式装载有关问题,GetProcAddress无法获取函数地址,烦请大家给点指导

2012-01-12 
DLL显式装载问题,GetProcAddress无法获取函数地址,烦请大家给点指导!大家好,我写了的个DLL:EncryptPHNA.dl

DLL显式装载问题,GetProcAddress无法获取函数地址,烦请大家给点指导!
大家好,我写了的个DLL:EncryptPHNA.dll,里面声明了一个导出函数:
BOOL     WINAPI   EncryptHNAString(LPCTSTR   pszKey,   LPCTSTR   pszIn,   LPTSTR   pszOut,   int   nOutLen)

并在.def文件中声明:
LIBRARY             "EncryptPHNA "
EXPORTS
EncryptHNAString

但是在显式装载时出现了问题:
typedef   BOOL   (WINAPI   *ENCRYPT)(LPCTSTR   pszKey,   LPCTSTR   pszIn,   LPTSTR   pszOut,   int   nOutLen);

HMODULE   =   m_hDLLModule   =   LoadLibrary(_T( "EncryptPHNA.dll "));
ENCRYPTm_Encrypt   =   (ENCRYPT)GetProcAddress(m_hDLLModule,(LPCSTR)_T( "EncryptHNAString "));

装载成功了,但是在获取函数地址时失败,用GetLastError()得到错误代码是127,查MSDN知道,是无法获取指定函数的地址.

我也上网查了些资料,并用Depends.exe查看了我的DLL,里面确实有EncryptHNAString这个导出函数.
然后在函数的声明之前加上   extern   "C "__declspec(dllexport),仍然不行.

我想,既然装载DLL成功了,却获取不了函数地址,应该是我的函数声明之类有问题把.

还请大家给点指导!

[解决办法]
int _stdcall add(int x,int y)导出函数定义

引用时这样
typedef int (_stdcall * lpAddFun)(int,int);

int main(int argc, char* argv[])
{
HINSTANCE hDll;
lpAddFun addFun;
hDll = LoadLibrary( "..\\Debug\\dllTest.dll ");
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, "add ");
//或addFun = (lpAddFun)GetProcAddress(hDll,MAKEINTRESOURCE(1));
//MAKEINTRESOURCE直接使用导出文件中的序号
if(addFun!=NULL)
{
int result = addFun(2,3);
printf( "\ncall add in dll:%d ",result);
}
FreeLibrary(hDll);
}
return 0;
}
我这样用的是可以成功的
[解决办法]
因为GetProcAddress(HMODULE, LPSTR), 后面这个参数只能是CHAR, 而不能是WIDE CHAR, 所以用UNICODE就不行了.

(LPCSTR)_T( "EncryptHNAString ")); 这样并不能将UNICODE转换成CHAR的

热点排行