C#和com vb6
我有一个C#和COM的问题。 :(C#和com vb6
[Guid("f7d936ba-d816-48d2-9bfc-c18be6873b4d")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Process : IProcess
{
public Process()
{
}
public int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount)
{
return 10;
}
}
[ComVisible(true)]
[Guid("5c640a0f-0dce-47d4-87df-07cee3b9a1f9")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IProcess
{
int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount);
}
而VB代码
Private Sub Command1_Click()
Dim test As Object
Set test = New Forwardslash_PlayerTrackingSystem_Api.Process
End Sub
我得到以下
ActiveX组件不能创建对象?
你有没有打勾的 “注册为COM Interop”在项目属性框?
你有ProgID还定义了C#源代码中的?您的示例代码似乎没有包含它。 (或者你是否正在使用现有的类型库,并以某种方式通过GUID在VB中创建对象?)
而且是在VB代码运行的计算机上的注册表中正确注册的C#组件?当您使用regasm.exe工具自行构建和/或注册时,请参阅Paolo的答案,让VisualStudio为您做到这一点。此工具相当于“真实”COM对象的regsrv32.exe,但是随后在注册表中注册了适当构建的.NET程序集以供COM使用。
如果我在本地机器上执行regasm,那么会出现自动化错误。那说 系统找不到指定的文件 – 2010-05-07 08:16:20
@Jim“系统找不到指定的文件” 2010-05-07 08:59:23
您的[接口类型]属性是错误的。 VB6需要一个IDispatch接口,它不能处理一个IUnknown接口。它最喜欢ComInterfaceType.InterfaceIsDual,它生成一个完整的类型库,在VB6编辑器中启用IntelliSense,比后期绑定的IDispatch快大约1000倍。
使用regasm
的/codebase
如果程序集未在GAC中注册,则必须使用开关。
是的,我做了:)但它不能正常工作:) – 2010-05-07 08:20:04