我在c#中创建了一个类,并使com的visible属性为true。但是,我无法在visual basic 6.0中看到它的属性。什么可能是一个问题?请帮帮我
答案 0 :(得分:4)
定义一个也是ComVisible的公共接口,让你的类实现它。
然后使用tlbexp.exe从C#程序集生成类型库:
tlbexp ComServer.dll /out:ComServer.tlb
您需要从VB6添加对类型库的引用,而不是程序集。 VB6如何知道你的程序集实际在哪里? Regasm是如何。它相当于.net程序集的regsvr32。
regasm ComServer.dll
答案 1 :(得分:1)
您是否将ComVisible(true)
应用于课堂?
答案 2 :(得分:1)
只要在属性(Visual Studio 2005或2008,或在程序集文件中将ComVisible属性设置为True)中使您的类ComVisible,您就应该能够在VB6中看到您的类。要获得intellisense,你需要声明一个接口,给它一个GUID,然后实现它,如下面的示例代码所示(注意:你必须为接口和具体类创建自己独特的GUID。
using System.Runtime.InteropServices;
using System.Drawing;
namespace example_namespace
{
[Guid("1F436D05-1111-3340-8050-E70166C7FC86")]
public interface Circle_interface
{
[DispId(1)]
int Radius
{
get;
set;
}
[DispId(2)]
int X
{
get;
set;
}
[DispId(3)]
int Y
{
get;
set;
}
}
[Guid("4EDA5D35-1111-4cd8-9EE8-C543163D4F75"),
ProgId("example_namespace.Circle_interface"),
ClassInterface(ClassInterfaceType.None)]
public class Circle : Circle_interface
{
private int _radius;
private Point _position;
private bool _autoRedeye;
public int Radius
{
get { return _radius; }
set { _radius = value; }
}
public int X
{
get { return _position.X; }
set { _position.X = value; }
}
public int Y
{
get { return _position.Y; }
set { _position.Y = value; }
}
}
}