学习DLL时,建立了一个规则的MFC DLL程序,就添加了一个对话框,IDD_DIALOG_HELLO ,此时编译时候没问题。为了调用,我另外添加了一个CPP文件,内容如下:#include "StdAfx.h"
#include "DllDialog.h"/*extern "C" __declspec(dllexport) void ShowDlg(void) 
{
CDllDialog dllDialog;
dllDialog.DoModal();
} */
编译结果为:
error C2065: 'IDD_DIALOG_HELLO' : undeclared identifier
error C2057: expected constant expression但是在DllDialog.h中,IDD_DIALOG_HELLO 是MFC自动定义了的 ,其为: enum { IDD = IDD_DIALOG_HELLO };
望高手能赐教。多谢!

解决方案 »

  1.   

    谢谢楼上两位兄弟, 添加就可以通过编译了。我把上面贴出来的注释部分去掉后,生成了个DLL,我另建一个MFC工程调用 ,如下
    void CCallDllDlg::OnButCall() 
    {
    // TODO: Add your control notification handler code here typedef void (* callfun)(void); HINSTANCE hinstance;
    hinstance = LoadLibrary("C:\\Downloads\\CtDll\\Debug\\CtDll.dll");
    if ( hinstance == NULL)
    {
    MessageBox("加载DLL失败");
    } callfun call = (callfun)GetProcAddress( hinstance, "ShowDlg");
    if ( call == NULL)
    {
    MessageBox("调用程序失败");
    } call();

    }
    为什么不弹出对话框? 跟踪调试,hinstance 和 call 都不为空, 跟网上的列子比较时,有区别的在于call的值后面还显示了_ShowDlg,是不是调用方式不对?要怎么改?多谢赐教
      

  2.   

    extern "C" __declspec(dllexport) void ShowDlg(void) 
    {
    CDllDialog dllDialog;
    dllDialog.DoModal();
    }加入
    extern "C" __declspec(dllexport) void ShowDlg(void) 
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CDllDialog dllDialog;
    dllDialog.DoModal();
    }