1

再会,

我想采用现有的 C# 项目并将函数包装到 C++/CLI DLL 中。我需要能够从 VB 6 读取这个 DLL。我选择这条路线是因为我不必注册 .net DLL 就可以在 VB 6 中使用它。坦率地说,我对这种事情没有经验,所以我将不胜感激一个很好的例子。我知道有很多类似的问题,但我无法找到足够简单的东西让我理解。

4

3 回答 3

1

这是一条相当不明智的做法,制作 C# 代码 [ComVisible] 非常简单,而且 Regasm.exe 不会吓到你。Regasm 的常见错误是忘记在您的开发机器上使用它的 /codebase 选项。

如果您坚持不利用这一点,那么您需要找到一种方法来自己加载 CLR,以便它可以执行您的 C++/CLI 和 C# 代码。有三种基本方法可以做到这一点。如果主机应用程序是 VB6,您已经注销了 COM 互操作并且自己托管 CLR 不是很实用。但是,您可以利用 C++/CLI 编译器生成非托管 DLL 入口点存根的能力,为您加载 CLR 并切换到托管代码执行。通过编写一个用 . 装饰的静态函数来做到这一点__declspec(dllexport)。该技术显示在此答案中。请注意,它的性能不是特别好,您将不得不忍受 VB6 Declare 语句所施加的限制。

还要检查这个可以将这些存根直接注入 C# 程序集的后处理工具。不知道它有多可靠,我自己没用过。

于 2012-08-13T15:44:16.327 回答
0

做一个男人,在几个不同的编译/链接/函数调用协议配置下制作那个 DLL。然后继续在您的 VB6 项目中尝试几种不同的引用配置。发布有效的方法。贡献,前进!

于 2012-08-13T15:15:00.037 回答
0

看看将托管代码导出为非托管

用于非托管导出的 C# 项目模板

于 2012-08-13T15:56:02.957 回答