将TLB导入C#

Ian*_*oyd 8 c# com typelib

我想将类型库(tlb)导入C#.

如何.tlb.cs代码导入代码文件?


Borland Delphi可以使用命令行工具导入.tlb到:.pastlibimp.exe

C:\Develop>tlibimp.exe SopQuotingEngineActiveX.tlb
Borland TLIBIMP Version 5.1  Copyright (c) 1997, 2000 Inprise Corporation
Type library loaded...
Created C:\Develop\SopQuotingEngineActiveX_TLB.dcr
Created C:\Develop\SopQuotingEngineActiveX_TLB.pas
Run Code Online (Sandbox Code Playgroud)

现在有一个.pas源代码文件,包含常量,枚举,接口,它们位于已编译的Type Library(tlb)文件中:

SopQuotingEngineActiveX_TLB.pas:

unit SopQuotingEngineActiveX_TLB;

interface
...
const
   CLASS_XSopQuotingEngine: TGUID = '{3A46FFB8-8092-4920-AEE4-0A1AAACF81A0}';
...

// *********************************************************************//
// Interface: IXSopQuotingEngine
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {AA3B73CC-8ED6-4261-AB68-E6AE154D7D52}
// *********************************************************************//
  IXSopQuotingEngine = interface(IDispatch)
    ['{AA3B73CC-8ED6-4261-AB68-E6AE154D7D52}']
    procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
    procedure OnEndPage; safecall;
    procedure Connect(const ConnectionString: WideString); safecall;
    procedure Disconnect; safecall;
    function  xmlRateQuote(const xmlQuote: WideString): WideString; safecall;
  end;
  ...

  CoXSopQuotingEngine = class
    class function Create: IXSopQuotingEngine;
  end;
Run Code Online (Sandbox Code Playgroud)

将类型库导入本机C#代码的.NET C#等价物是什么?


注意:我尝试使用tlbimp.exeWindows SDK附带的,但是将类型库导入托管程序集dll:

C:\Develop>"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\x64\tlbimp" SopQuotingEngineActiveX.tlb
Microsoft (R) .NET Framework Type Library to Assembly Converter 4.0.30319.1
Copyright (C) Microsoft Corporation.  All rights reserved.

TlbImp : warning TI3002 : Importing a type library into a platform agnostic assembly.  This can cause errors if the type library is not truly platform agnostic.
TlbImp : Type library imported to SopQuotingEngineActiveX.dll
Run Code Online (Sandbox Code Playgroud)

将类型库导入本机C#代码的.NET C#等价物是什么?


注意:我想看到的是一个.cs包含所有必需接口,常量,枚举的代码文件 - 调用COM对象所需的一切.例如:

SopQuotingEngineActiveX.cs

[ComImport, Guid("AA3B73CC-8ED6-4261-AB68-E6AE154D7D52")
       ]
public interface IXSopQuotingEngine
{
    void OnStartPage(object AScriptingContext);
    void OnEndPage();
    void Connect(string ConnectionString);
    void Disconnect();
    string xmlRateQuote(string xmlQuote);
}

[ComImport, Guid("3A46FFB8-8092-4920-AEE4-0A1AAACF81A0")]
public class XSopQuotingEngineClass
{
}
Run Code Online (Sandbox Code Playgroud)

(除了没有错误)

也可以看看

Jus*_*tin 11

你已经找到.Net等效的,Tlbimp.exe - 这个输出是一个程序集,不幸的是没有办法改变它.

如果要查看接口的C#声明等,那么您应该在生成的程序集上使用反编译器(例如ReflectorILSpy).此外,Microsoft关于如何修改这些声明的官方建议是修改生成的MSIL - 请参阅自定义主互操作程序集 .

对此(目前)的唯一替代方法是自己手工制作所有声明.