【发布时间】:2009-07-10 17:10:20
【问题描述】:
我有一个用 C# 制作的 DLL,这个 DLL 包含一些像 Creator 这样的类。
我需要加载这个 DLL 并在 C++ 非托管中使用 Creator 类,
所以有什么方法可以创建该实例,还是我必须只加载公开的函数?
我需要这样的东西:
CreatorInstance->Init();
这可能吗?
【问题讨论】:
标签: c# c++ unmanaged dllimport
我有一个用 C# 制作的 DLL,这个 DLL 包含一些像 Creator 这样的类。
我需要加载这个 DLL 并在 C++ 非托管中使用 Creator 类,
所以有什么方法可以创建该实例,还是我必须只加载公开的函数?
我需要这样的东西:
CreatorInstance->Init();
这可能吗?
【问题讨论】:
标签: c# c++ unmanaged dllimport
您需要的大部分内容都可以在这里找到:http://msdn.microsoft.com/en-us/library/x0w2664k%28VS.80%29.aspx
首先,您需要了解用于 C++ 编译的 /clr 开关。然后,您需要了解 Microsoft 添加的允许混合程序集的 C++ 扩展。 (指向托管类的 C++“指针”将使用 p^ 而不是 p*,依此类推。)
【讨论】:
John Fisher 使用 C++/CLI 的方法是迄今为止处理此问题的最简单方法,但不是唯一方法。
其他三个选项是:
1) 使用 COM 互操作通过 COM 包装 .NET 类
2) 您可以在您的本机、非托管应用程序中托管 CLR,然后调用它。详情请见this article。
3) 您可以托管 Mono 运行时,并使用它来调用您的托管代码。详情请see this page。
选项 2 和 3 非常相似,但 IMO,3 比 2 更容易。
【讨论】:
【讨论】:
首先,您不必“必须”使用 CLI 或 /clr 开关。使用良好的旧 COM 架构,您可以很容易地做到这一点http://msdn.microsoft.com/en-us/library/zsfww439.aspx。理解 COM 的工作方式可能是这里最大的挑战,但是一旦你知道它就会很有用。
【讨论】: