簡體   English   中英

從C ++(MSVC編譯器)調用C#dll

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM