【问题标题】:How to write C# to call vb6 code?如何编写C#调用vb6代码?
【发布时间】:2013-01-25 06:11:47
【问题描述】:

我在 VB6 中有一个 activeX DLL,我被要求用它运行一些测试。由于我不再有 VB6 环境,我认为最好尝试制作一个简单的 C# 程序来调用注册的 COM Dll。为此,我将 DLL 复制到 c:\windows\system32,使用 regsrv32 注册 DLL,重新启动计算机并将此 DLL 添加到 COM,因此我将其添加到我的项目中并从我的项目中引用它。我从中创建了一个对象并尝试从中调用一个函数,但除了 DllUnusedClass 和 DllUnused 之外没有其他可用的函数。

【问题讨论】:

  • 您可以尝试使用反编译器来查找可用的类。
  • 您不需要使用反编译器。使用 Windows SDK 附带的 Ole 类型库查看器之类的东西
  • 可用的东西是一个名为 DllUnused 的接口和一个类 NNetApply,我知道它有一个函数,我想调用它,但我不知道如何调用它!

标签: c# vb6


【解决方案1】:

您说您已在项目中添加了对 COM dll 的引用,现在我将右键单击该引用并选择“在对象浏览器中查看”。这将向您显示引用的 dll 中可用的类型。

可能是您没有创建适当类型的对象,因此在对象浏览器中查看它应该可以帮助您确定要创建的对象类型。

【讨论】:

  • 哦,谢谢你,约翰。还有一个问题!添加到我的引用中的 dll 是 NNetApply,但在对象浏览器中显示的是 Iterop.NNetApply,我已经无法使用它,因为我的程序不知道它!你知道,我可以在我的项目顶部添加 NNetApply,但它不知道 Interop.NNetApply 命名空间;
  • Interop.NNetApply 是 Visual Studio 创建的自动生成程序集,用于在托管代码和本机代码之间进行通信。它应该包含 COM 库中定义的相同类型的托管定义
  • 所以这个命名空间只包含一种类型(NNetApply),并且有一个名为 DllUnused 的接口和一个类 NNetApply.DllUnusedClass?!我知道它有一个函数,那么我该如何调用那个函数呢?
【解决方案2】:

确保您在 VB6 项目中拥有的任何要从 .Net 应用程序访问的类都将 Instancing 属性设置为 6 - GlobalMultiUse,以便它在范围内。

我已经使用设置为默认 5 - MultiUseInstancing 属性测试了您的场景,并遇到了您描述的相同问题。

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2012-04-21
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多