Importation TLB en C#

je veux importer une Bibliothèque de Type (tlb) en C#.

Comment puis-je importer une .tlb dans un .cs fichier de code?


Borland Delphi pouvez importer un .tlb en .pas en utilisant l'outil de ligne de commande 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

Et maintenant il y a un .pas fichier de code source contenant les constantes, les énumérations, les interfaces qui ont été à l'intérieur de la Bibliothèque de Type compilé (tlb) fichier:

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;

Qu'est-ce que l' .NET C# équivalent pour l'importation d'une bibliothèque de type en natif de code C#?


Note: j'ai essayé d'utiliser tlbimp.exe qui vient avec le kit de développement logiciel Windows, mais que les importations d'une bibliothèque de type dans un assembly géré 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

Qu'est-ce que l' .NET C# équivalent pour l'importation d'une bibliothèque de type en natif de code C#?


Remarque: Ce que je veux voir est un .cs fichier de code avec toutes les interfaces requises, des constantes, des énumérations - tout le nécessaire pour appeler l'objet COM. Pour des exemples souci:

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
{
}

(à l'exception sans bugs)

Voir aussi

pourquoi ne pas avoir l'assemblée suffisant? vous pouvez y faire référence dans vos projets, vous pouvez réfléchir sur elle si vous voulez voir ce qu'il contient. pourquoi avez-vous besoin de code source en C#?
Bancila: binaire Unique.
comment avez-vous contourner ce problème à la fin? J'ai vu la réponse ci-dessous, mais cela me rend très triste... :'[
Finalement, j'ai utilisé un Réflecteur de copier et de coller tout le contenu de l'assemblée à un nouveau .cs fichier. Vous devez être prudent d'utiliser un Réflecteur, et pas ILSpy. Il y a un bug dans ILSpy qu'il ne sait pas garder les méthodes d'interface dans le même ordre. Cela provoque votre virtual offset de la table à se tromper, et le code à l'échec horrible et impossible façons.

OriginalL'auteur Ian Boyd | 2011-04-29

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *