将TLB导入C#

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

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


Borland Delphi可以使用命令行工具tlibimp.exe.tlb导入tlibimp.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 

现在有一个包含常量,枚举,接口的.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; 

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


注意 :我尝试使用Windows SDK附带的tlbimp.exe ,但是将类型库导入托管程序集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 

将类型库导入本机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 { } 

(没有错误除外)

也可以看看

  • 将接口IDL文件转换为C#
  • 如何从C#中读取非托管代码的TLB(类型库)?
  • .NET C#:是否可以自动导入TLB(半)并将PreserveSig添加到一种类型?
  • 类型库导入程序(Tlbimp.exe)

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

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

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

要注册类型库,您应该使用regtlib.exe,如下所示:

导航到以下文件夹并将文件路径复制到剪贴板:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ regtlibv12.exe(实际文件夹路径可能会有所不同,具体取决于计算机上安装的.NET Framework版本。)(这也可能位于C:\ WINDOWS \ system32 \ URTTemp \ regtlib.exe)

复制路径打开命令窗口并执行以下命令,

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ regtlibv12.exe“.TLB文件的完整路径”

这应该说注册……. tlb成功

打开Visual Studio并创建一个C#控制台应用程序。 右键单击References,选择Add Reference …然后浏览到tlb文件。

这应该提供对dll / tlb的引用。 右键单击名称并选择,在对象浏览器中查看…展开树以查看可能使用的所有类型,调用和事件。