2009-10-20 7 views
4

Je suis en train de programmer une DLL. Je dois retourner une instance de TBitmap à l'application hôte. La DLL a une autre unité, qui est un formulaire, qu'il a un TImageList pour stocker des images. J'ai écrit une fonction que je veux retourner une image du TImageList (de la DLL à l'application hôte. Comment puis-je faire?Comment renvoyer une instance d'une DLL?

Merci, Yulién.

+1

S'il vous plaît, montrez le code problématique. Sinon, nous ne pouvons que deviner. –

+0

Pourriez-vous être un peu plus précis? La plupart d'entre nous n'ont pas de sphères magiques et du code pourrait aider. –

+2

Juste une courte note terminologique: vous ne pouvez pas retourner un type mais seulement des instances d'un type. Un objet n'est PAS un type. – jpfollenius

Répondre

-3

Vous ne pouvez pas retourner un objet par proprement parler, mais vous pouvez retourner un pointeur vers un objet. Reportez-vous à Mastering Delphi 6 et ce description of Vtables in delphi.

+0

La question concernait Delphi, pas C ou VB. –

+0

OK, je peux l'accepter. Mais le vrai problème ici est de renvoyer un objet, ce qui n'est pas possible. La langue dans laquelle la DLL est écrite est sans importance. – DaveParillo

+1

En Delphi, "renvoyer un objet" signifie "renvoyer un pointeur sur la structure de données qui définit l'objet", ce qui est facilement réalisable. –

0

objets sont des combinaisons de code et les données. une DLL normale ne supporte pas, car il ne supporte que la C application Binary Interface (C ABI), mais il y a un type de DLL qui fait: fichiers BPL En d'autres termes, vous devez créer un fichier .bpl et pas un fichier .dll. l'utilisateur d'être Delphi, bien sûr.

+1

Cela nécessite également que le développeur BPL et l'application hôte utilisent la même version de Delphi. – DaveParillo

4

Lisez ce vieux sujet sur borland.public.delphi.nativeapi: Delphi Object in DLL - does this work?.

Le lien vers un .pdf dans le dernier message est parti, mais grâce à Internet Archive Wayback machine On peut download it (regarder Exportation d'objets de DLL à la page 412).

Modifier: il s'avère que la partie intéressante du livre, pour notre propos, est également disponible @ Google Books, donc one can read it on-line.

2

Fondamentalement, ce que vous devez faire est de ne pas retourner un objet. Dans ce cas, vous voulez retourner bitmap, pourquoi ne pas simplement retourner le handle HBitmap?

+0

Ok, et si je dois retourner tout autre type d'installation ??? – Yulien

+1

Pour tous les objets de ressources Windows, tels que le handle de fenêtre, le handle de fichier, l'identifiant de thread, le pinceau, etc., vous pouvez passer le handle natif. Si vous devez passer un objet complexe écrit en Delphi. Vous pouvez le faire en passant le pointeur d'objet.Cependant à la fois de votre application hôte et DLL doit utiliser la même unité qui déclare l'objet, ce qui défait le but de DLL. – Darkerstar

Questions connexes