3

我和我的朋友已经将一个 C# 运行时库放在一起,我们希望将其编译或转换为本地汇编代码中的 .dll 并从 C++ 应用程序调用。

我怀疑我们可能不是第一个开始这种努力的人。所以我环顾四周,想出了以下几点:

  1. 如何从 C++ COM 迁移到 C++CLI
  2. 旧版 C++ 库的托管 C++ 包装器
  3. 为非托管 (C++) 代码编写托管包装器 - 自定义类型/结构
  4. 如何将 C# 转换为 C++
  5. http://bytes.com/topic/c-sharp/answers/268197-convert-c-form-c-net

但是,这些链接都在讨论如何将 C++ 代码移植到 CLI 或 C#。没有提及如何将 C# 托管代码移植到可从 C++ 应用程序调用的本机程序集中的独立 .dll 库中。

有什么想法吗?

此致,

巴尔德

4

2 回答 2

1

C++ 中您的问题 COM 组件的关键字如下例所示:

您可以使用 COM 注册您的 .Net 程序集,然后您可以从 C++ 调用它。

请参见下面的示例:

[Guid(123565C4-C5FA-4512-A560-1D47F9FDFA20")]
public interface ISomeInteface
{
    [DispId(1)]
    string FirstFunction{ get; }

    [DispId(2)]
    void SecondFunction();
}

[ComVisible(true)]
[Guid(123565C4-C5FA-4512-A560-1D47F9FDFA20")]
[ClassInterface(ClassInterfaceType.None)]
public sealed class SomeInteface: ISomeInteface
{
    public SomeInteface()
    {
    }

   public string FirstFunction
   {
    get { return "Work here"; }
   }

    public void SecondFunction()
   {
   }
}

更多信息;您可以查看以下链接: http ://social.msdn.microsoft.com/Forums/vstudio/en-US/440aca96-288a-4d5c-ab9a-87ea2cdd5ca8/how-to-call-c -dll-from-c http://support.microsoft.com/kb/828736

于 2013-09-11T14:05:15.793 回答
1

本质上,您需要一个围绕托管库的非托管包装器,这与更常见的问题相反。

基本思想是创建一个具有非托管导出(本机 C 风格函数)但内部使用托管 C++ 与您的库交互的 C++ 库。

请注意,跨层编组非托管数据可能很棘手 - 希望您只需要使用非常基本的类型(字符串和数字)。

另请注意,客户端需要安装适当的 .NET 框架 - 包装库不会绕过该要求。

以下是一些可能有帮助的链接:

从非托管 C++ 调用 C# 函数

在非托管应用程序中使用托管代码

于 2013-09-11T13:55:19.907 回答