关于规则dll与mfc扩展dll的区别
本人是非软件毕业的,最近在看mfc,目前遇到了一个难题,还希望内行人给讲解一下。我知道规则的dll可以被任何语言调用,它只可以导出函数,而不可以导出类。mfc扩展dll不...
本人是非软件毕业的,最近在看mfc,目前遇到了一个难题,还希望内行人给讲解一下。我知道规则的dll可以被任何语言调用,它只可以导出函数,而不可以导出类。mfc扩展dll不但可以导出函数,还可以导出类,问题是网上好多人说,mfc扩展dll只能被mfc”调用”——这里说的调用是不是导出的类只能被mfc调用,而函数还是可以被其他语言调用的?这个问题我是查过资料才问的,如果不懂就不要粘贴了!
展开
2013-08-14
展开全部
准确地说,如果你导出的是MFC的类,那这个导出类就真只能被MFC调用了
如果你是导出的是普通的C++类,那么调用者不一定要是MFC程序啊,普通的程序也可以,反正是用VC++写的都行,因为你导出的时候它会生成一个lib,里面保存了函数名各种信息,VC++都能识别的,跟MFC没关系
所以说,网上的一些说法有点片面,MFC扩展DLL,他们都把它认为是这个DLL都只导出MFC的类了,其实这是不对的,它除了可以导出MFC类,还可以导出非MFC类,导出方法还是一样,只不过这个类不是继承CObject,而是你自己定义的类;如果导出的函数是C标准那种,那么这个扩展的MFC DLL其实一样可以被其它语言调用的
说得有点啰嗦了,希望你能理解;最后偷偷告诉你吧,其实无论你导出什么函数,其它语言一样都可以调用的,只不过那个函数名就比较怪,会有一大堆修饰,例如可能是??AddNum@@QAE@XZ,只要是名字对了,都是可以调用的
如果你是导出的是普通的C++类,那么调用者不一定要是MFC程序啊,普通的程序也可以,反正是用VC++写的都行,因为你导出的时候它会生成一个lib,里面保存了函数名各种信息,VC++都能识别的,跟MFC没关系
所以说,网上的一些说法有点片面,MFC扩展DLL,他们都把它认为是这个DLL都只导出MFC的类了,其实这是不对的,它除了可以导出MFC类,还可以导出非MFC类,导出方法还是一样,只不过这个类不是继承CObject,而是你自己定义的类;如果导出的函数是C标准那种,那么这个扩展的MFC DLL其实一样可以被其它语言调用的
说得有点啰嗦了,希望你能理解;最后偷偷告诉你吧,其实无论你导出什么函数,其它语言一样都可以调用的,只不过那个函数名就比较怪,会有一大堆修饰,例如可能是??AddNum@@QAE@XZ,只要是名字对了,都是可以调用的
追问
谢谢你的详细回答,其实在导出函数时,定义一个def模块,在里面声明导出函数,这时导出的函数不会变名。
追答
对的,可以用def把名字重新定义
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询