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);

}
编译通过,却不能执行,弹出可执行文件遇到问题不能执行的对话框,高手帮忙看看哪里错了。
...全文
255 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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类的成员函数,不能这么来调用吧
  • 打赏
  • 举报
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2006-06-02 08:13
社区公告
暂无公告