繁体   English   中英

帮助:从VB6项目调用C#winforms dll?

[英]help: Call C# winforms dll from VB6 project?

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

我在C#.net中开发的模块应该是dll,并且应包含一些Windows窗体。 我能够从我的vb6项目成功调用ac#控制台应用程序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-Visible。 这是我如何更改您的代码:

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。 如果您不这样做,编译器将为您完成此操作,并且每次编译都可能破坏兼容性。 该数字无关紧要,因为它在编译之间不会改变。

您可能要签出C#中的“构建COM对象” 这是一个很好的入门教程。

一些重点:

将VC#对象暴露给COM世界需要以下……

 * 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. 

每个接口都需要在接口名称之前设置GUID属性。 要生成唯一的Guid,请使用guidgen.exe实用工具,然后选择注册表格式。

唯一的方法是将C#类公开为COM对象(也称为CCW-COM可调用包装),并在VB6代码中创建该COM对象的实例。

这应该可以帮助您入门:

http://www.bing.com/search?q=C%23+CCW&go=&form=QBRE&qs=n

这里有关于msdn的一些出色帮助:

http://msdn.microsoft.com/en-us/library/6bw51z5z.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM