我想将类型库(tlb)导入C#。
如何将.tlb
导入.cs
代码文件?
Borland Delphi可以使用命令行工具.tlb
将.pas
导入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
{
}
(除了没有错误)
答案 0 :(得分:11)
你已经找到.Net等价物,Tlbimp.exe - 这个的输出是一个程序集,不幸的是没有办法改变它。
如果您想查看接口的C#声明等,那么您应该在生成的程序集上使用反编译器(例如Reflector或ILSpy)。此外,Microsoft关于如何修改这些声明的官方建议是修改生成的MSIL - 请参阅Customizing Primary Interop Assemblies 。
这个(目前)的唯一替代方法是亲自手工制作所有声明。
答案 1 :(得分:1)
要注册类型库,您应该使用regtlib.exe,如下所示:
导航到以下文件夹并将文件路径复制到剪贴板: C:\ WINDOWS \ Microsoft.NET \框架\ 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的引用。右键单击名称并选择,在对象浏览器中查看...展开树以查看可能使用的所有类型,调用和事件。