gpt4 book ai didi

c# - 帮助 : Call C# winforms dll from VB6 project?

转载 作者:可可西里 更新时间:2023-11-01 09:50:04 24 4
gpt4 key购买 nike

我有一个 VB6 项目(windows 应用程序),我必须在 C#.net 中的现有 VB6 项目中重新开发一个模块。

我用C#.net开发的模块应该是一个dll,应该包含一些窗体。我能够从我的 vb6 项目中成功调用 c# 控制台应用程序 dll,但是当我尝试从我的 VB6 项目中调用带有 winforms 的 C# 类库时,我遇到了问题。

这是我为概念验证所做的工作 - 这是我的 C#.net 类库项目中的一个类文件。

namespace TestDll
{
public interface IClass1
{
void DisplayMessage();
}


public class Class1:IClass1
{
void IClass1.DisplayMessage()
{
MessageBox.Show ("Displyaing message");
}

}
}

我在同一个 nemspace 中有一个表单,我计划实例化 Class1 并在 C# winform 的 page_load 事件上使用它的对象。

在我的 VB6 项目中,我想显示我在 C#.net dll 中的表单。我通过这段代码调用它 -

Private Declare Sub DislayMessage Lib "TestDll.dll" ()

Private Sub Command1_Click() //On button click event of the VB6 windows form
DislayMessage
End Sub

我遇到错误 - “在 TestDll.dll 的 DisplayMessage 中找不到 DLL 入口点”

我不确定如何解决这个错误。我什至怀疑这是不是应该从 VB6.0 Windows 应用程序调用包含一些 winforms 的 C#.net dll 的方式。

我应该在我的 VB6 代码中实例化 Class1 吗?我该如何解决这个错误?我的方法正确吗?有更好的方法吗?

TIA。

最佳答案

您必须使您的类 COM 可见。以下是我将如何更改您的代码:

namespace TestDll
{
[Guid("FB8AB9B9-6986-4130-BD74-4439776D1A3D")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IClass1
{
[DispId(50)]
void DisplayMessage();
}


[Guid("74201338-6927-421d-A095-3BE4FD1EF0B4")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[ProgId("TestDll.Class1")]
public class Class1:IClass1
{
void IClass1.DisplayMessage()
{
MessageBox.Show ("Displyaing message");
}

}
}

注意 [DispId(50)]。您想要为您的 COM 可见方法、属性和事件指定调度 ID。如果你不这样做,编译器会为你做这件事,你可能会在每次编译时都破坏兼容性。这个数字并不重要,因为它在编译之间不会改变。

您可能想查看 Building COM Objects in C# .这是一个非常好的入门教程。

一些亮点:

Exposing the VC# objects to the COM world requires the following …

* The class must be public
* Properties, methods, and events must be public.
* Properties and methods must be declared on the class interface.
* Events must be declared in the event interface.

Every Interface needs a GUID property set before the interface name. To generate the unique Guid , use the guidgen.exe utility and select the Registry Format.

关于c# - 帮助 : Call C# winforms dll from VB6 project?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com