问一个DLL的问题,主程序调用DLL时出现了APPCRASH

[复制链接]
查看11 | 回复5 | 2021-1-27 06:09:32 | 显示全部楼层 |阅读模式

DLL部分:FloatCalDLL.dll
caculate.cpp
_declspec(dllexport)floatfloatcalculate(floatx,floaty,inttype)
{
switch(type)
{
case0:
{returnx+y;}
case1:
{returnx-y;}
case2:
{returnx*y;}
case3:
{returnx/y;}
}
}
主程序调用DLL部分,在“运算”的消息响应函数添加以下代码:
voidCFloatDialog::OnStart()
{
//TODO:Addyourcontrolnotificationhandlercodehere
HINSTANCEhdll;
hdll=LoadLibrary("..\\Debug\\FloatCalDLL.dll");
typedeffloat(*MyCalculate)(floata,floatb,intc);
MyCalculatecalfunc;
if(hdll!=NULL)
{
calfunc=(MyCalculate)GetProcAddress(hdll,"?floatcalculate@@YAHHH@Z");
}
else
{
AfxMessageBox("无法加载DLL");
return;
}
UpdateData(true);
m_num3=calfunc(m_num1,m_num2,m_occupation);
UpdateData(false);
FreeLibrary(hdll);
输入数据后点击运算就弹出对话框,应用程序已经停止工作,这是什么原因呢?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
应该是获得函数入口地址失败了,
m_num3=calfunc(m_num1,m_num2,m_occupation);
=>
if(calfunc)
m_num3=calfunc(m_num1,m_num2,m_occupation);
//////////////
calfunc=(MyCalculate)GetProcAddress(hdll,"?floatcalculate@@YAHHH@Z");
,这个也不应该这样写,具体可以网上搜索以下
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
calfunc需要判断是否为NULL
函数名称可能不对,用dependsview看一下
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
查看calfunc是不是0,使用link.exe/dump查看导出符号名
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
谢谢,问题解决了
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
这种问题,你每步代码都要看是否成功,否则指针操作容易出问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行