MFC扩展DLL加载时出现问题,高手帮忙看看哪里出现错误了

pinkpray 2006-06-02 08:13:19
MFC扩展DLL中定义了这样一个函数:
long CMyAdd::Add(long n1, long n2)
{
return n1 + n2;
}
将生成的MyAdd.ll拷贝到调用程序所在的目录下,调用函数的定义如下:
void CMyTestDlg::OnMyAdd()
{
HINSTANCE hDll = LoadLibrary("MyAdd.dll");

if(NULL == hDll)
{
AfxMessageBox( "MFC扩展DLL动态加载失败" );
}

if(NULL == hDll)
{
AfxMessageBox( _T("MFC扩展DLL动态加载失败" ));
}

typedef long (*Add)(long a, long b);
Add myadd;
myadd=(long(_cdecl * )(long,long))::GetProcAddress(hDll,"Add");
long c;
c = myadd(3,4);
CString sMsg;
sMsg.Format( _T("3+ 4 = %d"), c );
AfxMessageBox( sMsg );
FreeLibrary(hDll);

}
编译通过,却不能执行,弹出可执行文件遇到问题不能执行的对话框,高手帮忙看看哪里错了。
...全文
278 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cici2006 2006-06-14
  • 打赏
  • 举报
回复
你没有导出怎么就调用了呢。你想直接用的话。就用COM组件形式。接口就可以。这样使用。
rainliuyu 2006-06-14
  • 打赏
  • 举报
回复
想通过GetProcAddress获取DLL中的函数地址,只能获取那些在DLL中导出,也就是“export”出来的函数。
另外,你这种想直接调用某个函数的方法来使用DLL的话,建议不使用MFC扩展DLL,win32 dll就好了,选择export some symbols的那种
兔子爸 2006-06-13
  • 打赏
  • 举报
回复
MFC扩展DLL中,要导出的函数或类前要加AFX_EXT_CLASS宏,看看是否添加,仅拷贝生成的动态链接库到调用程序所在目录是不够的,还要讲MyAdd.lib文件拷贝到调用程序所在的目录.然后在调用程序的工程文件中导入MyAdd.lib文件(不拷贝也可以,不过要设置路径)
tracera 2006-06-04
  • 打赏
  • 举报
回复
楼主,我的dll知识也一般,MFC扩展DLL概念不知道你了解多少?
long CMyAdd::Add(long n1, long n2)
{
return n1 + n2;
}
但是上面这个代码怎么看起来也不象MFC扩展DLL(我认为这个必须有mfc控件)的东西。
看你的调用代码是mfc调用一个加函数。
http://dev.yesky.com/430/2142930_1.shtml照着这个仔细修改一下吧
wenbo_ying 2006-06-02
  • 打赏
  • 举报
回复
Add函数的CMyAdd类的成员函数,不能这么来调用吧

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧