从C+调用C#dll+;(MSVC编译器) 我有一个C语言的DLL,我需要从我的C++程序(本地C++,而不是C++ +CLI)调用它的一些函数。 P>一种方法是通过创建C*com服务器,然后调用C++ COM客户端的函数,如MSDN中的概述。 < P>另一种方法是在非托管进程中托管CLR,其中一个示例被概述。这是我们更喜欢的解决方案,因为我们不需要COM互操作。另一个例子是。
另一种方法(我相信在Matten链接的文章中也有介绍)是用C++/CLI编写包装器dll从C+调用C#dll+;(MSVC编译器) 我有一个C语言的DLL,我需要从我的C++程序(本地C++,而不是C++ +CLI)调用它的一些函数。 P>一种方法是通过创建C*com服务器,然后调用C++ COM客户端的函数,如MSDN中的概述。 < P>另一种方法是在非托管进程中托管CLR,其中一个示例被概述。这是我们更喜欢的解决方案,因为我们不需要COM互操作。另一个例子是。,c#,c++,.net,visual-studio,dll,C#,C++,.net,Visual Studio,Dll,另一种方法(我相信在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;
编写一个带有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的编译器。不确定接受哪种解决方案,因为它们都是可行的解决方案。你能提到另外两种解决方案吗?你的答案是完整的,我会接受?