【发布时间】:2012-09-03 17:10:17
【问题描述】:
这就是我的情况:我正在使用一个用非托管 c++ 编写的二进制文件,它允许用户指定一个 .dll 来自定义功能; c++ 应用程序将调用 dll 中的某些函数。在这种情况下,dll 将依赖于第三方的 .NET .dll 中打包的功能(我无法控制它)。我的任务是编写 c++ 应用程序使用的 dll。我更喜欢使用 c++,但如果它更有意义,我可以使用 c#。我怎样才能完成我想做的事情?我已经用有限的成功搜索了这个问题。请注意,这是我使用托管/非托管代码的极少数情况之一,因此我的知识有些欠缺。
【问题讨论】:
-
它绝对取决于 .NET dll - 如果它是 COM 可见的,您可以在 C++ 中编写一个非托管(=native)包装器。如果它不是 COM 可见的,那么它会变得更加复杂,因为那时您可能需要编写 2 个包装器:一个托管包装器通过 COM 公开它,以及一个用于托管包装器的本机包装器......
-
由于我的经验不足,我可能无法区分。我将 .NET dll 加载到依赖项walker 中,但没有看到任何列出的导出函数;我认为这意味着它不是 COM 可见的。如果是这样,是否有一种自动方法可以为 .NET 二进制文件生成 COM 可见的包装器?还是必须手写?
-
如果你不能改变两端,你几乎没有选择。您需要专注于首先加载 CLR,以便执行托管代码。通过谷歌搜索 CorBindToRuntimeEx、CLRCreateInstance for .NET 4 及更高版本开始这一旅程。