如何在Win32 C项目中使用C#dll?
发布时间:2020-12-14 02:08:52 所属栏目:Windows 来源:网络整理
导读:我正在研究一个解决方案,它的大部分核心引擎都是作为Win32 C开发的(并且是独立于平台的,也用于OS X),前段时间我们需要从C#调用C dll的核心引擎,我能够在C#中加载主解决方案的DLL(在SO的某些线程的帮助下).但现在我们在Managed C#dll中实现了某些东西,需要在W
我正在研究一个解决方案,它的大部分核心引擎都是作为Win32 C开发的(并且是独立于平台的,也用于OS X),前段时间我们需要从C#调用C dll的核心引擎,我能够在C#中加载主解决方案的DLL(在SO的某些线程的帮助下).但现在我们在Managed C#dll中实现了某些东西,需要在Win32 C项目中使用它吗? (只提供函数定义和dll)
解决方法
您可以创建托管C互操作DLL,以充当C#库的包装器.
很遗憾,托管C上的大多数教程只解释了如何将非托管C包装在C#中使用.但它也可以以其他方式工作. 在本机C代码中定义抽象接口类,然后在托管C DLL中创建一个具体的子类.在方法实现中调用C#对象. 最后,导出一个工厂函数,该函数将实例化实现类并返回本机代码可以使用的基类指针. 这是一个简单的例子: 首先,在本机DLL中定义类接口. interopclassbase.h class InteropClassBase { public: virtual void doStuff() = 0; virtual int getValue() = 0; virtual void getString(CString* outStr) = 0; }; 现在,您需要创建一个C/C++LI DLL,允许您在单个程序集中混合使用本机代码和托管代码.将新的C项目添加到您的解决方案中,并在项目配置中将“Common Language Runtime Support”选项设置为Mixed(/ clr). 一旦你添加了对你的C#库(我们称之为ManagedLibrary)的引用,我们就可以实现interop类: interopclass.cpp #include "interopclassbase.h" #include <vcclr.h> public class InteropClass : public InteropClassBase { protected: gcroot<ManagedLibrary::ManagedObject^> m_managedObject; public: InteropClass() { m_managedObject = gcnew ManagedLibrary::ManagedObject(); } virtual void doStuff() { m_managedObject->doStuff(); } virtual int getValue() { return m_managedObject->getValue(); } virtual void getString(CString* pOutStr) { System::String^ managedString = m_managedObject->getString(); CString nativeString(managedString); // overloaded CString constructor if (pOutStr) *pOutStr = nativeString; } }; __declspec(dllexport) InteropClassBase* getImplementationPointer() { return new InteropClass(); } 现在您只需要从本机项目加载互操作DLL并调用导出的函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何隐藏Win7登录界面的administrator用户名恢复
- .net – 在同一个解决方案中为多个项目添加相同的“* .dll”
- 如何在Windows中开始编程?
- win-universal-app – Windows 10获得DeviceFamilyVersion
- Windows XP中的Windows-xp – inno setup.exe失败,浮点除以
- api – Windows Live Mesh为程序设置提供同步;我可以添加对
- active-directory – 如何让我的域控制器与正确的外部时间源
- windows-server-2003 – 如何获取DNS服务器统计信息?每日总
- 如何设置win32 api c按钮背景颜色和文字颜色?
- windows-server-2003 – Windows 7客户端,2003 Server,用户