自动化错误实例化一个.net COM可见的类
问题描述:
当我创建了这个简单的类一个COM互操作的.dll:自动化错误实例化一个.net COM可见的类
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给了我对对象的intellisense。
Private Sub Form_Load()
Dim score1 As ComWeightedScore
Set score1 = New ComWeightedScore
score1.Score = 500
End Sub
在行Set score1=new ComWeightedScore
上引发异常自动化错误。
它不可能比这更简单...错误在哪里?
答
你忘了/代码库选项在Regasm.exe命令行中。
如果没有它,您必须使用gacutil.exe将程序集强名称并放入GAC。客户端机器上的好主意,只是不在你的机器上。
答
如果您正在运行64位处理器并将项目编译为'CPU-Any',则需要仅针对x86进行编译或在64位COM +空间中注册dll。包括32位和64位的regasm
实施例:
%WINDIR%\ Microsoft.NET \框架\ v4.0.30319 \ regasm “Contoso.Interop.dll” /tlb:Contoso.Interop.tlb /代码库的Contoso .Interop
%WINDIR%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm “Contoso.Interop.dll” /tlb:Contoso.Interop.tlb /代码库Contoso.Interop
为什么你说这个错误是在分配int还是long?构造函数调用失败了。如果您从构造函数的主体中删除赋值,它仍会失败吗?此外,提供更多的信息和细节你得到的错误。 –