在调用.net com dll时强制VB6编译器使用早期绑定

时间:2014-08-24 08:40:49

标签: .net com vb6 early-binding

我有一个用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

1 个答案:

答案 0 :(得分:1)

接口声明之上 我换了

[InterfaceType(ComInterfaceType.InterfaceIsDual)]

[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

它解决了问题