读书人

为什么GetProcAddress没返回,该如何处

发布时间: 2012-01-21 21:31:43 作者: rapoo

为什么GetProcAddress没返回
DLL中声明
__declspec(dllexport) void CreateInstance(CCommProtoIntf**) ;
CPP文件中
void CreateInstance (CCommProtoIntf** pCommIntf)
{

CSitecSuWrapper* pClassAddr ;
pClassAddr = new CSitecSuWrapper ;
*pCommIntf = pClassAddr ;

}

应用程序头文件中
// 宏定义函数指针类型
typedef void(*lpCreateFun)(CCommProtoIntf **);

CPP文件中
HINSTANCE hDll ; // DLL句柄
lpCreateFun CreateFun ; // 函数指针

hDll = LoadLibrary ( "D:\\Project\\SitecSU\\Debug\\SitecSU.dll ") ;

if (hDll != NULL)
{
CreateFun = (lpCreateFun)GetProcAddress (hDll, "CreateInstance ") ;
}
这边 hDll 得到了0x01500000 但是CreateFun 一直为0x00000000 那边出问题了?



[解决办法]
那个dll是你写的吗?如果是的话,在导出CreateInstance时加上extern "C ",这样你就可以用
GetProcAddress(hDll, "CreateInstance ")了。如果不是你写的话,使用Depend看到的名字,你应该可以加载成功呀。不过像导出 "?CreateInstance@@YAXXZ ",很不好。如果你能让dll改掉是最好的。可以通过def文件来控制导出的函数名。

读书人网 >VC/MFC

热点推荐