请不要复制,真正懂得人来说,
网上很多人说 规则的MFC DLL接口中不能有MFC类 要导出的接口返回值也不能是MFC类,
但本人亲测,这句话是错误的,一个规则的MFC Dll
导出一个
CWnd *CreateApi(CWnd *p);
这个导出函数是没有任何问题的,并且可以在其他MFC程序中调用,求大神解释,这两种DLL到底有什么本质的区别?

解决方案 »

  1.   

    Regular   DLL(MFC规则DLL)可以用别的任何语言调用,它的接口是C风格,不能导出类; 
    MFC...Extension   DLL可以在接口里导出类,只能用Vc++程序调用,不能被别的语言调用。
    http://topic.csdn.net/t/20060124/16/4533622.html
      

  2.   


    大哥看清楚再说,我就是看到别人的解释,认为解释的有问题才来发帖的,其中就是针对你给的链接做的测试,我用规则的MFCDLL 接口中就用的是MFC的类 为什么可以?
    哎 说了别复制 还是复制哦
      

  3.   

    不能导出类是指不能导出可以用于创建对象的类  不是说某个类型的指针
    如扩展DLL 你导出一个CMyWnd(继承自CWnd)用这个类类可以创建一个自定义的窗口
    而规则的DLL不能导出一个继承自MFC的类只能导出一个C++类
      

  4.   


     你的意思是说 规则的DLL 
    class AFX_EXP_CLASS CMyWnd:public CWnd
    {
    }
    不能这样吗?我做过测试,这样是可以的,是我理解错了 还是?求解释
      

  5.   

    规则的DLL如果导出MFC类的话,一般可以,不会报错,但是,当你对导出的MFC类声明一个对象,特别是这个MFC类是带有资源的时候,基本上对象是创建不出来的,例如你要是导出一个对话框类的话,你在应用程序里面调用的时候根本调用不出来,这是本人亲自经历的事情,浪费了我一个星期的时间找答案
      

  6.   


    你之所以调用不成功,是因为你资源切换的问题吧,默认的是调用调用DLL的主程序,通过
    AFX_MANAGE_STATE(AfxGetStaticModuleState())就能解决了吧
    这并不是两种DLL本质的区别吧