在DLLTEST.dll中,我导出一个类
Class AFX_EXT_CLASS CmyClass{
public:
    int ShowMsg(int nFlag);
    CmyClass();
    virtual ~CmyClass();
};在另外一个MFC程序中,我调用如下:
void CMainFrame::OnTestDll()
{
    typedef int (*pFuncShowMsg)(int nFlag);
    //路径是绝对正确的。
    HINSTANCE hdll = LoadLibrary("F:\\TestDllOne\\Debug\\dll\\DllTest.dll");    pFuncShowMsg funcShowMsg;
    //函数名也是通过DEPEND工具查看后,复制过来的。
    funcShowMsg= (pFuncShowMsg)GetProcAddress(hdll,"?ShowOneMessage@CTestRec@@QAEHH@Z" );    int nFl = 1;    if (funcShowMsg) 
       funcShowMsg(nFl);
    
    FreeLibrary(hdll);
}结果在编译和链接时都没有error和warninig.
但是在运行时,总是报错“User breakpoint called from code at 0x1023160e”。是不是在显式调用指定DLL中某个类某个函数时,不能直接调用??
出错的调用栈显示在函数退出时报错,等待各位有经验的高手指点。不甚感谢!!

解决方案 »

  1.   

    你能不能确定你的funcShowMsg函数调用成功了吗???
      

  2.   

    编译时没有错误,是因为你是loadLibarary()加载dll的。试着include "类定义.h"文件,
    然后连接lib文件.lib.然后实例化导出类的一个对象。再通过对象调用类函数。
      

  3.   

    to  mahatma_cn(喝茶不忘采茶人)
    你所说的方式是可以的,但是那样的话dll文件只能放在自己的程序目录或者系统目录下.
    我采用LoadLibrary()的方式进行链接是为了可以将DLL文件放在程序的子目录下。如dll\dlltest.dll
      

  4.   

    to flyelf(空谷清音):
    请问调用约定是什么概念,是否有需要设置的参数??
      

  5.   

    补充:
    我的程序中调用的函数是没有问题的,在调用函数中报错时可以忽略,随后的FreeLibrary()也会出同样的错。后面出的错误是无法忽略的。
      

  6.   

    关于调用约定可以参考这个:
    http://blog.csdn.net/goodname008/archive/2004/07/24/50662.aspx你把.dll放在程序目录中,用隐式调用也是可以的,不用LoadLibrary。
      

  7.   

    to  fzd999(花差花差), 请问在显式调用DLL中,导出一个类应该怎么操作?实在不知,敬请指教!
      

  8.   

    to  goodname008(卢培培,充电中......),现在我的函数必须要用显式调用的,放在程序目录中的话,会覆盖原来的别的DLL文件。
    请问有别的方法解决吗??