大佬教程收集整理的这篇文章主要介绍了.net – 如何在VS版本中制作一致的dll二进制文件?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我提供dll时,我应该知道一个策略吗?
下一步:获取DLL以链接到静态运行时.将来自多个第三方的dls组合在一起,每个第三方链接并期望不同的运行时,可能与应用程序预期的运行时不同,这是一种痛苦,可能会迫使安装程序软件安装7.0,7.1,8.0和9.0的运行时 – 其中一些存在于不同的服务包中,这可能会或可能不会引起问题.善待 – 静态链接你的dll项目.
– 编辑:
您无法使用此方法直接导出c类.在模块之间共享类定义意味着您必须具有同类运行时环境,因为不同的编译器或编译器版本将以不同方式生成装饰名称.
您可以通过将类导出为COM样式接口来绕过此限制…也就是说,虽然您无法以独立于运行时的方式导出类,但您可以导出“接口”,您可以通过声明来轻松实现一个只包含纯虚函数的类……
struct IExportedMethods { virtual long __stdcall AMethod(void)=0; }; // with the win32 macros: interface IExportedMethods { STDMETHOD_(long,AMethod)(THIS)PURE; };
在您的类定义中,您从此接口继承:
class CMyObject: public IExportedMethods { ...
你可以通过制作C工厂方法来导出这样的接口:
extern "C" __declspec(dllexport) IExportedClass* WINAPI CreateMyExportedObject(){ return new CMyObject; }
这是一种非常轻量级的导出编译器版本和运行时独立类版本的方法.请注意,您仍然无法删除其中一个.您必须包含释放功能作为dll或接口的成员.作为界面的成员,它可能如下所示:
interface IExportedMethods { STDMETHOD_(void) Release(THIS) PURE; }; class CMyObject : public IExportedMethods { STDMETHODIMP_(void) Release(){ delete this; } };
您可以采用这个想法并继续使用它 – 从IUnkNown继承您的接口,实现ref计数AddRef和Release方法以及查询接口或其他功能的QueryInterface的能力.最后,使用DllCreateClassObject作为创建对象并获得必要COM注册的方法.所有这些都是可选的,但是,您可以轻松地通过C函数访问简单的接口定义.
以上是大佬教程为你收集整理的.net – 如何在VS版本中制作一致的dll二进制文件?全部内容,希望文章能够帮你解决.net – 如何在VS版本中制作一致的dll二进制文件?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。