[英]Call a C# dll from C++ (MSVC compiler)
我有一個C#dll,我需要從我的C ++程序(本機C ++,而不是C ++ / CLI)中調用其某些功能。
推薦的做法是什么?
另一種方法(我相信也可以在Matten鏈接的文章中進行概述)是用C ++ / CLI編寫包裝dll。
您編寫帶有DLL導出的常規C ++類:
#pragma once
#ifdef CSCLIWRAPPER_EXPORTS
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
class DLLAPI CsCliWrapper
{
private:
void *wrap;
public:
CsCliWrapper();
virtual ~CsCliWrapper();
};
引用項目中的托管dll,並在實現中使用它:
#include "CsCliWrapper.h"
using namespace System;
using namespace System::Runtime::InteropServices;
CsCliWrapper::CsCliWrapper()
{
CsPlugin^ obj = gcnew CsPlugin();
wrap = GCHandle::ToIntPtr(GCHandle::Alloc(obj)).ToPointer();
}
CsCliWrapper::~CsCliWrapper()
{
GCHandle h = GCHandle::FromIntPtr(IntPtr(wrap));
h.Free();
}
但是請注意,這種方法不是可移植的,目前在Linux或OSX上沒有支持C ++ / CLI的編譯器。
一種實現方法是創建C#COM服務器,然后從C ++ COM客戶端調用其功能,如MSDN的COM Interop教程所述 。
另一種方法是在非托管流程中托管CLR, 鏈接的文章中附帶了examples概述了一個示例 。 這是我們首選的解決方案,因為我們不需要COM互操作。 在此MSDN頁面上給出了另一個示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.