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
- Convertir l'Interface IDL du fichier à C#
- Comment lire TLB(Type de Bibliothèques de code non géré à partir de C# ?
- .NET C#: Est-il possible d'importer TLB (semi-)automatiquement et ajouter PreserveSig à un type?
- Type De Bibliothèque De L'Importateur (Le Tlbimp.exe)
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
Vous devez vous connecter pour publier un commentaire.
Vous avez déjà trouvé l' .Net équivalent, Tlbimp.exe - La sortie de cette assemblée et, malheureusement, il n'y a aucun moyen de changer cela.
Si vous voulez voir C# déclarations des interfaces etc... ensuite, vous devez utiliser un décompilateur (comme Réflecteur ou ILSpy) sur l'assemblage qui en résulte. Aussi l'avis officiel de Microsoft sur la manière de modifier ces déclarations est de modifier les résultats MSIL - voir Personnalisation De Pia (Primary Interop Assemblies
.
La seule alternative à cette situation (pour l'instant) est de la main de l'artisanat de toutes les déclarations de vous-même.
ILSpy
, je ne savais pas à ce sujet.OriginalL'auteur Justin
Enregistrer une bibliothèque de type, vous devez utiliser regtlib.exe comme suit:
Accédez au dossier suivant et copier le chemin d'accès du fichier dans le presse-papiers:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe
(le chemin d'accès au dossier peut être différent selon le .NET Framework version installée sur votre ordinateur.)
(Cela peut aussi être situé dans C:\WINDOWS\system32\URTTemp\regtlib.exe)
Copier le chemin d'accès
Ouvrez une fenêtre de commande et exécutez la commande suivante,
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe "chemin d'accès Complet .Fichier TLB"
Cela devrait dire l'Enregistrement .......tlb succès
Ouvrez Visual Studio et créez un C# console application. Cliquez du bouton droit sur Références, sélectionnez Ajouter une Référence... et puis recherchez le fichier tlb.
Cela devrait donner une référence à la dll/tlb. Clic droit sur le nom et sélectionnez Afficher dans le Navigateur d'Objet... Développez l'arborescence pour voir tous les types, des appels et des événements qui peuvent être utilisés.
OriginalL'auteur Ian Morton