我用这个简单的类创建了一个COM-interop .dll:
using System.Runtime.InteropServices;
namespace ClassLibrary1
{
[ComVisible(true)]
[Guid("795ECFD8-20BB-4C34-A7BE-DF268AAD3955")]
public interface IComWeightedScore
{
int Score { get; set; }
int Weight { get; set; }
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("9E62446D-207D-4653-B60B-E624EFA85ED5")]
public class ComWeightedScore : IComWeightedScore
{
private int _score;
public int Score
{
get { return _score; }
set { _score = value; }
}
private int _weight;
public int Weight
{
get { return _weight; }
set { _weight = value; }
}
public ComWeightedScore()
{
_score = 0;
_weight = 1;
}
}
}我使用以下命令注册了它:C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ regasm C:\ ComClasses \ Classlibrary1.dll / tlb:Classlibrary1.tlb
最后,我成功地添加了对.dll的引用,此后VB6给了我对该对象的智能感知。
Private Sub Form_Load()
Dim score1 As ComWeightedScore
Set score1 = New ComWeightedScore
score1.Score = 500
End Sub
在线上Set score1=new ComWeightedScore
出现异常“自动化错误”。
几乎没有比这更简单的了……错误在哪里?!
您忘记了Regasm.exe命令行中的/ codebase选项。
没有它,您将必须对程序集进行强命名,然后使用gacutil.exe将其放入GAC。在客户端计算机上的好主意,而不是在您的计算机上。