我有一个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# - 从C++(MSVC编译器)调用C#dll,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20418801/

10-11 15:57