首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TLB导入C#

将TLB导入C#
EN

Stack Overflow用户
提问于 2011-04-29 15:34:46
回答 2查看 21.8K关注 0票数 11

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

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

Borland可以使用命令行工具.tlb.pas导入tlibimp.exe

代码语言:javascript
复制
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源代码文件,其中包含编译类型库文件中的常量、枚举和接口:

SopQuotingEngineActiveX_TLB.pas

代码语言:javascript
复制
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;

将类型库导入到本机.NET代码中的C#等效于什么?

注意事项:我尝试使用Windows附带的tlbimp.exe,但它将类型库导入托管程序集dll:

代码语言:javascript
复制
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

将类型库导入到本机.NET代码中的C#等效于什么?

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

SopQuotingEngineActiveX.cs

代码语言:javascript
复制
[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
{
}

(除无臭虫外)

另请参阅

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-29 15:52:56

您已经找到了.Net等价物,Tlbimp.exe --它的输出是一个程序集,不幸的是,没有办法改变它。

如果您想看到接口的C#声明等.然后,您应该对生成的程序集使用反编译器(如反射器ILSpy)。此外,微软关于如何修改这些声明的官方建议是修改得到的MSIL --参见定制主互操作程序集

除了这个(目前),唯一的选择是自己手工完成所有声明。

票数 14
EN

Stack Overflow用户

发布于 2014-04-15 16:15:38

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

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

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

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

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

打开Visual并创建一个C#控制台应用程序。右键单击引用,选择添加引用..。然后浏览到tlb文件。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5834100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档