如果你的DLL不使用MFC,那么使用Non-MFC Win32 DLL,不必要的连接MFC会导致磁盘空间和内存的浪费如果你的DLL需要使用MFC,并且DLL将来会被MFC或者非MFC程序调用,那么使用Regular DLL。动态链接的Regular DLL文件小,占用内存少,但是需要和MFCx0.DLL,MSVCRTx0.DLL一起发布;静态链接的Regular DLL文件大,而且可能占用额外的内存,因为他需要装入自己的MFC程序代码拷贝,还有一点需要考虑的就是静态链接的Regular DLL编译时间要长许多。
Regular DLL使用"C"接口,可以使用MFC的类如果你的DLL需要使用MFC,并且只会被MFC程序调用,你可以选择Regular DLL或者Extension DLL。如果你的DLL实现可重用的MFC派生类,或者你需要在MFC程序和DLL之间传递MFC派生对象,你必须使用Extension DLL。
Extension使用C++/MFC类接口,Regular DLL也可以输出类,方法是输出头文件中包含类的头部定义,需要输出的类的成员函数用同样的方法声明,定义,例如:
void FAR PASCAL EXPORT myclass::myfunc(void) { 函数代码; }
然后在DEF文件中添加EXPORT函数类似下列代码:
?myfunc@myclass@@QAGXXZ @4 NONAME
取得函数名称的方法是使用Map文件

解决方案 »

  1.   

    如果是扩展DLL,你导出了类的话,别的语言是没有办法使用的,但如果你没有导出类,也是使用常规的接口函数,而且在这些接口函数当中的参数也都是常用的数据类型,别的语言也是可以使用这个DLL的。但你必须静态链接这个DLL,也可以动态链接,但要把MFC的东西拷贝过去。
      

  2.   

    问: xj_h() 
    使用 Regular DLL 怎么接收系统传过来的 INSTANCE 呀,在哪初始化?
    别的在 DLL_PROCESS_ATTACH 中处理,不知这如何用?
    谢谢!
      

  3.   

        你可以用REGULAR DLL,但需要作个WINAPI函数接口.我刚刚就这样完成了一个DLL