2011-04-29 17 views
6

Quiero importar una biblioteca de tipos (tlb) en C#.Importar TLB en C#

¿Cómo importo un .tlb en un archivo de código .cs?


Borland Delphi puede importar un .tlb en .pas mediante el uso de la herramienta de línea de comandos 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 

y ahora hay un archivo de código .pas fuente que contiene constantes, enumeraciones, interfaces que se encontraban dentro del compilado Tipo archivo de biblioteca (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; 

¿Cuál es el equivalente de .NET C# para importar una biblioteca de tipos al código C# nativo?


Nota: he intentado usar tlbimp.exe que viene con el SDK de Windows, pero que importa una biblioteca de tipos en una DLL de ensamblado administrado:

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 

¿Cuál es el .NET C# equivalente para ¿importar una biblioteca de tipos al código C# nativo?


Nota: Lo que quiero ver es un archivo .cs código con todas las interfaces necesarias, constantes, enumeraciones - todo lo necesario para llamar al objeto COM. Para ejemplos bien:

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

(excepto sin los fallos)

Véase también

+1

¿por qué no está teniendo el conjunto suficiente? Puedes hacer referencia a ella en tus proyectos, puedes reflexionar sobre ella si quieres ver lo que contiene. ¿Por qué necesitas el código fuente de C#? –

+0

@Marius Bancila: solo binario. –

+0

@IanBoyd ¿cómo se solucionó esto al final? He visto la respuesta a continuación, pero esto me hace muy infeliz ...: '[ – MoonKnight

Respuesta

10

ya has encontrado el equivalente .Net, Tlbimp.exe - La salida de este es una asamblea y por desgracia no hay manera de cambiar esto.

Si desea ver las declaraciones C# de interfaces, etc., entonces debe usar un descompilador (como Reflector o ILSpy) en el ensamblaje resultante. También el consejo oficial de Microsoft sobre cómo modificar estas declaraciones es modificar el MSIL resultante - ver Customizing Primary Interop Assemblies .

La única alternativa a esto (actualmente) es crear personalmente todas las declaraciones.

+0

+1 por * no se puede hacer *. Y +1 por 'ILSpy', no sabía de eso. –

1

Para registrar una biblioteca de tipos, se debe utilizar regtlib.exe de la siguiente manera:

Vaya a la siguiente carpeta y copiar la ruta del archivo al portapapeles: C: \ Windows \ Microsoft.NET \ Framework \ v4. 0.30319 \ regtlibv12.exe (la ruta de la carpeta real puede ser diferente dependiendo de la versión de .NET Framework instalada en su computadora.) (Esto también se puede encontrar en C: \ WINDOWS \ system32 \ URTTemp \ regtlib.exe)

Copie la ruta Abra una ventana de comandos y ejecute el siguiente comando,

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ regtlibv12.exe "Ruta completa del archivo .tlb"

Esto debería decir ....... Registro de TLB éxito

Abra Visual Studio y cree una aplicación de consola C#. Haga clic derecho en Referencias, seleccione Agregar referencia ... y luego busque el archivo tlb.

Esto debería dar una referencia a la dll/tlb. Haga clic con el botón derecho en el nombre y seleccione, Ver en el Examinador de objetos ... Expanda el árbol para ver todos los tipos, llamadas y eventos que pueden usarse.

Cuestiones relacionadas