在AddDLL.dll中我这样定义的:
extern "C" __declspec(dllexport) int _stdcall AddDLL(int x,int y);
int _stdcall AddDLL(int x,int y)
{
return x+y;
}
在AddExeDlg.cpp中我是这样定义的:
void CAddExeDlg::OnOK() 
{
UpdateData();
int x=atoi(m_edit1);
int y=atoi(m_edit2);
UpdateData(true);
HINSTANCE hinst;
hinst=LoadLibrary("AddDLL.dll");
if(hinst==NULL)
{
DWORD errCode=GetLastError();
CString tt;
tt.Format("%d",errCode);
AfxMessageBox(tt);
return;
}
typedef int (FAR __cdecl *FUN)(int x,int y);
    
FUN fun=(FUN)GetProcAddress(hinst,"AddDLL");
if(GetProcAddress(hinst,"AddDLL")==NULL)
{
        AfxMessageBox("fail");
return;
}
int z=fun(x,y);
FreeLibrary(hinst);
CString str;
str.Format("%d",z);
m_edit3=str;
UpdateData(false);
// CDialog::OnOK();
}
我已经将AddDLL.dll拷贝到AddExeDlg.h同级目录了
可总是弹出对话框 "fail"

解决方案 »

  1.   

    int __declspec(dllexport) AddDLL(int x,int y)
    {
    return x+y;
    }
      

  2.   

    这么改
    extern "C" __declspec(dllexport) int _stdcall AddDLL(int x,int y)
    {
      return x+y;
    }typedef int (_stdcall *FUN)(int x,int y);
      

  3.   

    extern "C"有时候也不可靠的。建议还是用一个DEF文件来导出吧,不要偷懒。
      

  4.   

    用vc自带的depends工具看下你的dll导出函数和你调用的名称是否一样。