1

我正在尝试从 VB 6 调用 C# COM 对象,但出现错误:453 指出很难找到 DLL 的入口点。我将 c# 中的所有模块设为公开,并将我的 COM 可见性设为 TRUE,我注册了我的 .dll 文件,我有可用的类型库文件,我还调用了 P/Invoke 调用。我仍然收到错误消息。我在下面粘贴我的代码

VB6:

Private Declare Function DisplayCForm Lib "C:\Users\LP027077\Documents\Visual Studio 2010\Projects\COMWorld\COMWorld\bin\Debug\COMWorld.dll" ()
Private Sub Command1_Click()
DisplayCForm
End Sub

C#:

 namespace COMWorld
{

    [Guid("23047247-38D3-464F-A845-0D42A7ACD622")]
    [ComVisible(true)]
    public class COMObject
    {
        [DllImport("Kernel32.dll", EntryPoint = "GetConsoleWindow",SetLastError = true)]
        internal static extern IntPtr GetConsoleWindow();
        public void COMModule()
        {
            Form f1 = new Form();
            f1.Text = "Hello VB6 from c# .NET";
        }
    }
}

请在这方面帮助我!提前致谢

4

2 回答 2

6

当我需要从 VB 6 代码调用 .Net COM 对象上的方法时,我通常会执行以下操作:

  1. 将 COMVisible 属性添加到我的 .Net 类和程序集。
  2. 构建并注册我的 .Net 程序集。
  3. 通过 Project | 在我的 VB 项目中添加对我的 .Net 程序集的引用 参考菜单。
  4. 在我的 VB 代码中使用“New”关键字来创建我的 .Net 类的实例,并使用它的 progid 来调用所需的方法。

.Net 程序集的 progid 默认为程序集名称加上用句点分隔的类的名称。在 VB 中添加对程序集的引用后,它应该出现在 Intellisense 和 VB IDE 的对象浏览器中。

要将您的示例与“COMWorld”的程序集名称和一个名为“COMObject”的类和一个名为“COMModule”的方法一起使用,我的 VB 代码如下所示:

Private Sub Command1_Click()

    Dim class1 As New COMWorld.COMObject
    class1.COMModule

End Sub

免责声明:恐怕我的 MacBook Air 上没有 VB 6 IDE,所以代码可能不是 100% 编译器证明!

希望这可以帮助!

于 2012-12-21T21:12:24.473 回答
0

您的“声明函数”用于“经典 DLL”,而不是 COM。使用 COM,只需设置对它的引用,然后以通常的“Dim myObject as theCOMClass”语法声明您的对象。

“很难找到” dll 的入口点,因为 dll 是一个 COM dll,并且您尝试使用头文件而不是通过 iUnknown 接口访问它。

于 2012-12-23T04:57:58.757 回答