假设我正在用C++和C#编写一个应用程序。我想用C++编写底层部分,用C#编写高层逻辑。如何从C++程序加载.NET程序集并开始调用方法和访问C#类的属性?
发布于 2008-09-19 22:19:00
[Guid("123565C4-C5FA-4512-A560-1D47F9FDFA20")]
public interface IConfig
{
[DispId(1)]
string Destination{ get; }
[DispId(2)]
void Unserialize();
[DispId(3)]
void Serialize();
}
[ComVisible(true)]
[Guid("12AC8095-BD27-4de8-A30B-991940666927")]
[ClassInterface(ClassInterfaceType.None)]
public sealed class Config : IConfig
{
public Config()
{
}
public string Destination
{
get { return ""; }
}
public void Serialize()
{
}
public void Unserialize()
{
}
}
在此之后,您需要对您的程序集进行regasm。Regasm将添加必要的注册表项,以允许您的.NET组件被视为COM组件。之后,您可以像调用任何其他COM组件一样,在C++中调用您的.NET组件。
发布于 2008-09-19 22:34:45
你真的应该研究一下C++/CLI。它使得这样的任务变得近乎微不足道。
否则,您将不得不围绕C#代码生成COM包装器,并让您的C++应用程序调用COM包装器。
发布于 2008-09-20 01:50:49
我肯定会为此研究C++/CLI,并避免COM和所有容易产生的注册麻烦。
使用C++的动机是什么?如果只是简单的风格,那么你可能会发现你可以用C++/CLI编写所有的东西。如果是性能,那么在托管C++和非托管代码之间来回调用是相对直接的。但它永远不会是透明的。您不能首先将托管指针传递给非托管代码,而不将其固定,这样垃圾回收器就不会移动它,当然,非托管代码也不会知道您的托管类型。但是托管(C++)代码可以知道您的非托管类型。
另一件要注意的事情是,包含非托管代码的C++/CLI程序集将是特定于体系结构的。您将需要为x86和x64 (以及IA64)单独构建。
https://stackoverflow.com/questions/106033
复制相似问题