我有一个用c#编写的com dll 运行Regasm之后 我可以从VB6调用这个dll,引用com dll。 在VB6中,我可以使用intellisense。
然而,当我按F5编译时,编译器在调用com dll时没有发现任何错误。它必须使用后期绑定。
如何才能使用早期绑定?
声明接口
using System.Runtime.InteropServices;
namespace combridge
{
[Guid("2f4b6041-91e3-4d9f-a9f5-9bd4adfd1789")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IBridge
{
// methods go here
}
}
声明主要类
[Guid("085777fa-9397-4cfd-843a-85ececb86789")]
[ProgId("companyname.ComBridge")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class BridgeImplementation : IBridge
{
#region Public Implementation
[DispId(1)]
[ComVisible(true)]
public string EchoTest(string message)
{
return string.Format("Echo '{0}' at {1:T}", message, DateTime.Now);
}
// etc
[更新]
在VB6项目中,我引用了我使用
创建的tlb文件c:\WINDOWS\Microsoft.Net\Framework\v4.0.30319/regasm /verbose /codebase /tlb:CommBridge.tlb ComBridge.dll
在VB6中,我使用
创建对象Dim o As BridgeImplementation
Set o = New BridgeImplementation
o.EchoTest // executes
o.NonExistantFunction // run time error
答案 0 :(得分:1)
接口声明之上 我换了
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
带
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
它解决了问题