DLL部分:FloatCalDLL.dll
caculate.cpp
 _declspec (dllexport) float floatcalculate(float x,float y,int type)
{
switch(type)
{
case 0:
{return x+y;}
case 1:
{return x-y;}
    case 2:
{return x*y;}
case 3:
{return x/y;}
}
}主程序调用DLL部分,在“运算”的消息响应函数添加以下代码:
void CFloatDialog::OnStart() 
{
// TODO: Add your control notification handler code here

HINSTANCE hdll;
hdll=LoadLibrary("..\\Debug\\FloatCalDLL.dll");
    typedef  float (*MyCalculate)(float a,float b,int c);
    MyCalculate calfunc; 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);
输入数据后点击运算就弹出对话框,应用程序已经停止工作,这是什么原因呢?

解决方案 »

  1.   

    应该是获得函数入口地址失败了,
    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");
    ,这个也不应该这样写,具体可以网上搜索以下
      

  2.   

    calfunc需要判断是否为NULL函数名称可能不对,用depends view看一下
      

  3.   

    查看calfunc是不是0,使用link.exe /dump查看导出符号名