gpt4 book ai didi

c# - 将 TLB 导入 C#

转载 作者:太空狗 更新时间:2023-10-29 18:23:21 37 4
gpt4 key购买 nike

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

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


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

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 源代码文件,其中包含已编译类型库 (tlb) 文件中的常量、枚举和接口(interface):

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;

将类型库导入 native 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

将类型库导入 native C# 代码的 .NET C# 等效项是什么?


注意:我想看到的是一个 .cs 代码文件,其中包含所有必需的接口(interface)、常量、枚举 - 调用 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
{
}

(除了没有错误)

另见

最佳答案

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

如果您想查看接口(interface)等的 C# 声明...那么您应该在生成的程序集上使用反编译器(例如 ReflectorILSpy)。此外,Microsoft 关于如何修改这些声明的官方建议是修改生成的 MSIL - 请参阅 Customizing Primary Interop Assemblies .

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

关于c# - 将 TLB 导入 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5834100/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com