2011-12-21 1 views
2

J'ai une API pour un fichier lib. Avec ce fichier lib, les fichiers .h ont été fournis. Maintenant, je veux appeler le fichier lib dans le Delphi, et utiliser ses fonctionnalités.utilise le fichier lib dans Delphi. comment importer le fichier lib

Comment le fichier lib est-il connecté au Delphi?

mise à jour: ok allot de travail autour est nécessaire, et si je reçois un dll? comment puis-je relier cela dans le Delphi?

Répondre

5

Vous ne pouvez pas utiliser un fichier lib pour lier à une DLL à partir de Delphi. Le fichier .lib serait utilisé par les clients C ou C++ de la DLL.

En Delphi, vous devez traduire manuellement le fichier d'en-tête .h dans une unité d'importation Pascal en utilisant le mot-clé external. Un exemple de ceci de l'unité Windows.pas dans la source Delphi. Le fait que vous ne puissiez pas utiliser le fichier .lib n'est en fait pas un gros problème car vous devez traduire le fichier .h, quoi qu'il arrive.

+1

Cette réponse fait l'hypothèse qu'un fichier DLL compilé est disponible pour le fichier LIB associé. Il est en fait possible de compiler quelque chose comme un fichier LIB ou un fichier DLL. Lorsqu'un fichier DLL est disponible, il suffit de convertir les fichiers d'en-tête associés (.H). Cependant, lorsque le code n'a été rendu disponible que dans un fichier LIB, il est nécessaire de convertir complètement la source en Delphi (si disponible) pour pouvoir l'utiliser dans Delphi. Cela dit, il est regrettable que Delphi n'ait pas pris en charge .LIB alors que de nombreux autres compilateurs l'ont soutenu depuis un certain temps. – Glenn1234

+0

@glen pour lier à une lib statique vous pouvez simplement lier la lib dans une DLL avec un compilateur C –

+0

@David: Afaik les symboles ne seront pas déclarés avec des drapeaux d'exportation alors, et donc pas visible? –

0

Dans certains cas, il est possible d'extraire des membres d'un fichier .lib à l'aide d'outils tels que le convertisseur de fichiers d'objets d'Agner Fog (voir http://www.agner.org/optimize/?e=0,34,36) en fichiers .obj.

La syntaxe est

objconv.exe libname.lib -lx

pour extraire tous les membres.

En extrayant tous les membres, vous pouvez vous assurer qu'il n'y a aucun membre manquant. Cependant, s'il existe d'autres dépendances (vers d'autres fichiers .lib), ceux-ci ne seront pas résolus et devront être résolus manuellement. De plus, la traduction des fichiers d'en-tête est toujours requise.

Remarque: Le format de fichier d'objet peut également être converti. Delphi ne comprend que OMF, alors que les compilateurs Intel (par exemple) ne crachent que COFF. Une conversion est donc nécessaire, ce qui peut également être fait par l'outil. Comme cela a été dit, cela ne fonctionne que dans certains cas et cela nécessite sûrement une certaine expertise dans ce domaine, car le compilateur n'aidera pas beaucoup avec les messages d'erreur (souvent les messages sont irritants et trompeurs).

Questions connexes