收录日期:2020/10/20 19:22:27 时间:2016/07/19 20:29:23 标签:进程/线程/DLL
现在我用mfc显示链接DLL文件,函数指针用GetProcAddress()获取的却是一个空的地址,具体代码如下(DSUM为函数名):
HINSTANCE hDllInst = AfxLoadLibrary("add.dll"); 
if(hDllInst)
{
typedef BOOL(WINAPI * DSUM)(const char *);
DSUM lobj;
//返回dll中ILoadOBJ()函数的地址 

lobj=(DSUM)GetProcAddress(hDllInst,"DSUM");

if (lobj)//-------ERROR!!总是返回空地址
{
DSUM((LPCSTR)name);
}
FreeLibrary(hDllInst);
}

请教各位高手为什么会出现这种情况,查了半天也没有查到解决方案,谢谢各位!!
GetLastError();
用Depends看看是否有这个导出名。

大小写、前缀什么的。
加载dll出错了
应该是你的导出名字被改了  比如一个函数 add(...) DLL导出的话可能会改成_add  C方式导出的话 加上extern "C"  要不加一个DEF文件  这种方式你的DEF文件里写的导出什么就是什么  
1查看句柄 hDllInst看看是否为空。
2然后进入add.dll,看看函数DSUM是否是导出函数。
句柄 hDllInst不为空,你说的进入add.dll,怎么操作呢?Ps:DLL中DSUM函数前写的void __declspec(dllexport)
引用 6 楼 haowensxsf 的回复:
句柄 hDllInst不为空,你说的进入add.dll,怎么操作呢?Ps:DLL中DSUM函数前写的void __declspec(dllexport)

在void _declspec(dllexport) 前面加上个extern "C"试试。
extern   "C"的作用是,使编译器按照c的方式生成函数名,c的方式实际的函数名和你写的一样。
确实是没有写extern   "C",谢谢楼上各位了!!

b/s下客户端的文件保存到数据库的问题? 怎样通过编码取得当前机器Cpu的序列号? Struts1.1为何不能自动验证 图书下载地址,也不知道能下不大家试试吧!!! javascript的bug??? 谁有dominoR5010的中文语言包,共享一下。万分感谢 b/s下客户端的文件保存到数据库的问题? 一个有关服务器实例的问题?请教 怎样通过一个字符串,去构造我工程中已经有的一个窗体? 各位大侠,请帮我解决一下这个难题好吗?谢谢了!! 关于事务流 使用ado连接时,表上的触发器出错的问题 2000系统突然跳出!请教! 两表之间的插入更新的效率问题! 兄弟我巨想做Smart Card(智能卡)相关的工作!!!!!! FRow[\"遲到時數\"] System.Int32,值为:{10} 如何和int型的数计算? 请问大家几个网络编程小问题? 这个板块开辟的真及时,占个位置先 北大青鸟怎么样? 上次问过的,关于来访者身份的问题!!!可是没有解决,现在还请大家帮帮忙!!在线等!! 用xp adsl的同志进来一下! 请问各位,在javascript里可以判断操作系统的版本吗?(win 98/ win 2000/ win XP) 使用ado连接时,如果表上的触发器出错的问题 如何用正则表达式获取文件名,不包含扩展名? 请问各位,在javascript里可以判断操作系统的版本吗?(win 98/ win 2000/ win XP) 装那种Linux?(菜鸟第二问) 如何查看各个板块的综合排名? 如何改变最大(小)化等系统按钮的提示? 使用ado连接时,如果表上的触发器出错的问题 j2sdkee-1-3-1-win.exe哪里下载?