我有一个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/