c# - 在 C 中使用 C# dll - 主机 CLR 或注册 COM 互操作,Visual Studio 2010

标签 c# .net c visual-studio-2010 msdn

正如描述的那样here我想在我的 C 程序中使用 DLL。我考虑的前两个选项是:

<强>1。主机 CLR

我的问题是来自 this 的注释文章:

Hosting methods provided by versions of the .NET Framework before the .NET Framework 4 are deprecated. We recommend that you use the interfaces introduced by the .NET Framework 4 and discussed in this topic.

在我的例子中,DLL 文件在 .NET Framework 2.0 下工作,所以这首先可能是个问题。

  • 有谁知道我是否能以某种方式做到这一点?

<强>2。注册 COM 互操作

另一种选择是使用 COM。在这种情况下,我需要知道 Visual Studio 2010 中的选项 Register for COM interop 究竟做了什么。DLL 文件是我们公司还提供的库的一部分顾客。所以我需要知道的是:

  • DLL 中存储了哪些附加信息?
  • 公司不想为 COM 互操作注册其 DLL 有什么原因吗?

感谢您提供任何信息!

最佳答案

使用 Regasm.exe(又名“为 COM 互操作注册”)做两件事:

  • 它记录了 DLL 所在的位置,以便可以自动找到它。您只需在自己的代码中使用一个数字,一个 GUID。
  • 它记录运行代码所需的 CLR 版本。您会自动找到合适的。

所以它解决了您要解决的确切问题 :) 当然不是巧合。自己托管 CLR 的优势在于您可以调用任何 .NET 代码,而不仅仅是 [ComVisible] 的那种代码。这不是避免必须学习如何编写 COM 代码的方法,托管接口(interface)和调用 .NET 代码所需的主要 .NET 接口(interface)(如 _Assembly)也是基于 COM 的。使用 C 而不是 C++ 是残酷和不寻常的惩罚,最好避免。

关于c# - 在 C 中使用 C# dll - 主机 CLR 或注册 COM 互操作,Visual Studio 2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21528895/

相关文章:

c# - 在 C# 中替代 HttpListener 和 Griffin.WebServer

.net - ReSharper 混淆了我的 Visual Studio - 将 Visual Studio 重置为默认值

c# - 如何将文件从 UNC 共享复制到本地系统?

c - 字符串末尾打印奇怪的符号 - C

c - 如何创建一个使用输入 GTK 更改文本的窗口

c - 递归scanf死循环

c# - 何时选择从代码隐藏而不是外部 js 文件进行 Javascript 注入(inject)

c# - 以字符串数组形式传入多个参数

c# - 文化不敏感 VS 文化敏感

.net - xunit和System.Interactive.Async