我做了一个正规的动态链接库,在对话框模式下可以用而且没有什么问题,但在单文档下就不能用,而且我在单文档下弹出一个对话框,在对话框下也不能用。给我的感觉是:在对话框模式下一定能用,在sdi,mdi 下怎么用都不行。

解决方案 »

  1.   

    我觉得跟对话框倒没什么关系。估计是进程初始化的时候有点不同。你DLL用到了什么,干什么用的?
      

  2.   

    静态调用时是不是指定了lib文件的路径,包含了头文件没有;动态调用时分配了内存没有,指定的参数个数和类型是否一致.
      

  3.   

    当然是你自己的问题了,是那中方法调用的呢,然后我帮你,如果是用LIB调用的话,你应该放对路径,
      

  4.   

    或者
    //--定义“实例”
      HINSTANCE dd;
    //--声明dll内的函数
      int __stdcall (*bbb)(int);
    //--装载dll
      dd = LoadLibrary("dll.dll");
    //--取得dll中的函数地址
      (FARPROC)bbb = GetProcAddress(dd , "test2");
    //--调用dll中的函数
      Caption = IntToStr(ddd());
    //--释放“实例”
      FreeLibrary(dd);
      

  5.   

    答无所谓:
    我的dll是正规的类型,在dll中这样生明,extern"c" _declspec(dllexport) BOOL seal();
    {AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CSeal dlg;
    if(IDOK == dlg.domodal())
    {
    retrun TRUE;
    }
    return FASLE;
    }
    在可用的dialog中与在不可的sdi下的调用方法是一样的。隐式调用。答小士,跟我斗:
    我是隐式调用的。路径应该是对的吧,在dialog下的设置与在sdi下的设置是一样的。都是当前目录。
      

  6.   

    在对话框的源程序类的声明前加上AFX_EXPORT_CLASS
      

  7.   

    我想应该是资源的问题,因为你的DLL中的函数中用到了对话框,你看一看DLL中的对话框资源ID与EXE中的资源ID是否有相同的,如果相同则要改为不同,或者在
    extern"c" _declspec(dllexport) BOOL seal();
    {
        //改变当前的资源,gThisDLLInstance 在DLLMain中保存成全局对象
        ::AfxSetResourceHandle(gThisDLLInstance);    .........//你的代码
        //还原资源
        ::AfxSetResourceHandle(::AfxGetInstanceHandle());
    }
      

  8.   

    好象没有什么问题呀,不过我要的是显示调用,
    给你代码看看,留你的E-MAIL,或者我的[email protected]
      

  9.   

    先谢谢了!我的E-MAIL是:[email protected]
      

  10.   

    问“没什么大不了”大哥,这样加行吗?
    这个dll的INSTANCE是什么,我不知道。
    整个dll的名字是CDignApp;创建时有CDignApp theApp自动生成。extern"C" _declspec(dllexport) BOOL Seal()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    HINSTANCE gThisDLLInstance;
    gThisDLLInstance = theApp.m_hInstance;
    ::AfxSetResourceHandle(gThisDLLInstance);
    CSquareDlg dlg;
    if(IDOK == dlg.DoModal())
    {
    return TRUE;
    }
    return FALSE;
    ::AfxSetResourceHandle(::AfxGetInstanceHandle());
    }
      

  11.   

    ???????“没什么大不了”:我向你说的这样加了,不行,我把资源里的ID号也改了。不行。但我在资源看见了一个我不明白的问题,我有像这样的Seal对话框五六个,每一个对话框有一百来个控件,但我在资源里看见不同的对话框的相同控件ID号一样,在资源里也只出现一个对应的数字。例如:我的每一个对话框中都有IDC_LIST1(IDC_LIST1设置时在五个对话框中都同名),在资源中的数字为20002 ;我就想问一下,这样多(五六个)的列表控件确只有一个对应ID号。