扩展MFC DLL

李赞红 2005-01-27 10:30:39
我在MFC扩展DLL中写了一个函数:
__declspec(dllexport) BOOL isOdd(int num)
{
if(num % 2 == 0)
return true;
else
return false;
}

在另一个测试程序中这样调用:
typedef BOOL ISODD(int);
ISODD *isOdd;

HINSTANCE hm;
if(hm = ::LoadLibrary("mfcdll3.dll"))
{
isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");
if(isOdd)
{
if(isOdd(8))
MessageBox("是偶数");
else
MessageBox("不是偶数");
}
else
{
MessageBox("有问题");
}
::FreeLibrary(hm);
}
else
{
MessageBox("DLL加载失败");
}

但是有问题,是不是和普通的DLL调用不一样啊?
...全文
113 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrenwu 2005-01-28
  • 打赏
  • 举报
回复
up
老夏Max 2005-01-28
  • 打赏
  • 举报
回复
缺少调用约定。
__declspec(dllexport) _stdcall BOOL isOdd(int num)
{
if(num % 2 == 0)
return true;
else
return false;
}

在另一个测试程序中这样调用:
typedef _stdcall BOOL ISODD(int);
ISODD *isOdd;

HINSTANCE hm;
if(hm = ::LoadLibrary("mfcdll3.dll"))
{
isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");
if(isOdd)
{
if(isOdd(8))
MessageBox("是偶数");
else
MessageBox("不是偶数");
}
else
{
MessageBox("有问题");
}
::FreeLibrary(hm);
}
else
{
MessageBox("DLL加载失败");
}

iamltq 2005-01-28
  • 打赏
  • 举报
回复
up
Biecheny 2005-01-28
  • 打赏
  • 举报
回复
问楼主一下:
函数名写入def文件了吗?
oyljerry 2005-01-28
  • 打赏
  • 举报
回复
函数加上调用约定,然后显示加载
wzh0591 2005-01-27
  • 打赏
  • 举报
回复
不好意思,因为浏览器出错,又被卡了。
你若是只在DLL中用到MFC类则只需要用Regular DLL。这样可以方便的采用显式加载,方法就如同你所示的代码。
wzh0591 2005-01-27
  • 打赏
  • 举报
回复
因为卡住了,下接上文:
你在编写扩展DLL时,主要目的是导出MFC的类,可在类声明中插入一个MFC宏,如下:
class AFX_EXT_CLASS classname:public classname
wzh0591 2005-01-27
  • 打赏
  • 举报
回复
你用的是DLL显式加载,这不适用于MFC Extension DLL;我这几天也在研究DLL方面的问题,发现只能用隐式加载MFC Exten

15,471

社区成员

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

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