以下是我的DLL中的代码。(MFC向导生成的DLL)DLL名字为Manager.dll
extern "C" _declspec(dllexport) int Managercu()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
AfxMessageBox("新DLL");
return 0;
}
//下面是得到这个函数的另一程序中的代码却得不到。此程序框架是多窗口的MDI。
//运行到这句话时int iTemp = Proc();出错误。应该怎么解决呢?
//多问一下。应该样把程序中的参数传到DLL中去呢。
void CMainFrame::OnCuPZ()
{
typedef int(_cdecl *MaCu)();
HINSTANCE hinstDLL=NULL; 
hinstDLL=LoadLibrary("Manager.dll");
if (hinstDLL)
{
MaCu Proc;
Proc = (MaCu)GetProcAddress(hinstDLL,"Managercu");
int iTemp = Proc();
FreeLibrary(hinstDLL);
}
else
{
MessageBox("用户Manager.DLL丢失!请重新安装程序","提示",MB_OK|MB_ICONINFORMATION);
}
}//上面是得到这个函数的另一程序中的代码却得不到。此程序框架是多窗口的MDI。
//运行到这句话时int iTemp = Proc();出错误。应该怎么解决呢?
//多问一下。应该样把程序中的参数传到DLL中去呢。

解决方案 »

  1.   

    我没细看,不过我把我知道的告诉你
    在你的DLL文件里面加上两个函数看看
    BOOL CXXXDllApp::InitInstance ()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    return TRUE;
    }BOOL CXXXDllApp::ExitInstance ()
    {
    return TRUE;
    }
    当然,你得在H文件里面声明一下
      

  2.   

    extern "C" _declspec(dllexport) int Managercu()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    // normal function body here
    AfxMessageBox("新DLL");
    return 0;
    }
    楼上,这里面我不是已经声明了吗?
      

  3.   

    Proc = (MaCu)GetProcAddress(hinstDLL,"Managercu")
    这个估计失败了,你最好用depends工具看一下生成的dll里面实际的函数名字
    在vc下面即使用了 extern "C" 也不见得一定不改名字
      

  4.   

    楼上说的也不一定能行。
    你可以在“Proc = (MaCu)GetProcAddress(hinstDLL,"Managercu")”语句的下面再加入:
    if (Proc)
    {
      handletype=1;
      Proc(1,hinstDLL);
     }        
    FreeLibrary(hinstDLL);
    然后在DLL文件中的Managercu函数内再加入:
    if (handletype==0)
    {
        .
        .
        .
    }
    if (handletype==1)
    {
        .
        .
        .
    }
      

  5.   

    你没写DEF文件吧。如果要动态加载,应该写DEF。
      

  6.   

    1.Manager.lib,  Manager.dll 拷贝到相应的位置2.在project --> setting -->link -->object/library modules : 加入Manager.lib3.在MainFrame.cpp前面加上 
    extern "C" _declspec(dllimport) int Managercu()
      

  7.   

    楼上的,谢谢了。我周一再试一下呢。我初试DLL,不知道怎么用呢。我的打算是在DLL中生成CPORTSHEET属性页,然后现ADD PAGE,呵呵,不过没有成功。难道一定要在EXE中做吗?
    谢谢,请提供一个解决的想法。
    分不够再加。
      

  8.   

    那你应该用MFC扩展DLL导出CYourPropertySheet类
      

  9.   

    你是不是没有把DLL文件拷贝到测试工程的目录里头啊我瞎猜的哈~1~
      

  10.   

    那你应该用MFC扩展DLL导出CYourPropertySheet类
    ?这个应该怎么做呢?谢谢了。
      

  11.   

    1. dll 中 类的定义.h 改成 class AFX_EXT_CLASS CYourClass
    2.编译dll
    3.拷贝dll
    4. 使用dll的程序中 类的定义 也改成 class AFX_EXT_CLASS CYourClass
    5.编译使用dll的程序
      

  12.   

    extern "C" __declspec(dllexport)
      

  13.   

    typedef int(_cdecl *MaCu)();