c# - 尝试从 VB 6 调用 C# COM 对象

标签 c# vb6

<分区>

我正在尝试从 VB 6 调用 C# COM 对象,但出现错误:453,指出很难找到 DLL 的入口点。 我将 c# 中的所有模块设为公共(public),并将我的 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";
        }
    }
}

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

最佳答案

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

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

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

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

Private Sub Command1_Click()

    Dim class1 As New COMWorld.COMObject
    class1.COMModule

End Sub

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

希望这对您有所帮助!

关于c# - 尝试从 VB 6 调用 C# COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13996670/

相关文章:

c# - 在 C# 中反转 1 位

vb6 - 是否有类似于 C sscanf 的 VB6 函数?

vb6 - 是否可以编写 App.PrevInstance Replacement 来提供实时信息

c# - 在 COM Called Wrapper 中使用 .NET Generic List ToArray 会导致访问冲突,我是否遗漏了什么?

function - 如何使用VB6传递函数参数?

mysql - Vb6将密码作为文本框插入数据库中

c# - C#.Net 中的图像压缩

c# - 为什么 Visual Studio 2010 不允许在 linq 查询中使用 "is null"而 VS2017 允许?

c# - 将 linq to sql 结果放入层次结构中,以便在无序列表中使用(对于 jquery 树)

c# - Windows Azure 移动服务数据获取已完成