【问题标题】:Using C# dll in C++ codes without using Regasm在 C++ 代码中使用 C# dll 而不使用 Regasm
【发布时间】:2014-08-20 11:40:38
【问题描述】:

我创建了一个使用 C# dll 的 C++ 应用程序,链接如下所示。

http://support.microsoft.com/kb/828736

该应用程序在我的开发 PC 上运行良好,但是当我尝试在另一台 PC 上运行它时,它失败了。

使其工作的唯一方法是在该 PC 上重新编译 C# dll 并在该 PC 上再次运行 Regasm 命令以工作。

有没有办法以这样的方式构建我的 C# dll,这样我就不必在我的应用程序部署到的每台 PC 上每次都这样做?

【问题讨论】:

    标签: c# c++ .net dll com


    【解决方案1】:

    regasm 的作用是为您的 C# dll 生成一个 COM 包装器,然后将其注册为一个 COM 对象。

    你不需要重新编译,一旦你有了一个 dll,你就可以在目标 PC using regasm 上注册它。

    调用 C# dll 的其他主要方法是使用 Microsoft 的 C++/CLI 系统编写 C++ .net 程序。这基本上是creating .NET programs using a superset of C++ 的一种方式(提示:它不是 C++,这是一种耻辱,因为它取代的旧托管扩展对于这项任务更加透明)。由于它不是“真正的”C++,您最终会得到一个 .NET 二进制文件而不是 C++ 二进制文件,因此请注意这一点。一方面是您可以为 C# dll 编写 C++/CLI 包装器并从您的 C++ 程序中调用它,这可能是在系统之间创建桥梁的首选方式。

    【讨论】:

    • 如果我要为 C# dll 编写一个包装器,我还需要在客户端 PC 上执行 RegAsm 吗?例如,C++ 程序将调用我的 C++/CLI wrapperClass,而后者仍然调用 C# dll?
    • 没有。您只需要 Regasm,因为您将 c# DLL 转换为 com 对象。如果您编写一个 c++/CLI 包装器,它将是一个普通的 c++ DLL,但您必须“手动”处理与 c# 的互操作。有一个谷歌,找到一个教程适合细节。
    【解决方案2】:

    我这样做了,它成功了,将代码复制并粘贴到 cmd 上

     %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\regasm.exe MyAssembly.dll
    

    如果它对你有用,请投票。 :D

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多