Dll de Delphi, multilangage ?

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 29 juil. 2005 à 17:25
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 août 2005 à 11:31
Je débute en Delphi en même temps que je continu le VB (Que je vais arrêter dès que je serais suffisement rapide en Delphi).

Je vais sûrement être obligé d'apprendre le C en école d'ingé...

J'aimerais bien que les dll que je compile en Delphi soient réutilisables en C.

Les dlls de l'API semblent utilisables depuis n'importe quel langage.

J'ai déjà utilisé mes dlls en Delphi depuis VB.

J'ai néanmoins eu des problèmes avec des fonctions renvoyant des string. (Je les airemplacées par des PChar).

Quelle sont les contraintes sur les syntaxes d'appel faut il que je me fixe pour que mes dlls soient aussi utilisables que celles de l'API ?

Faut il que mes fonctions ne renvoient que des long ?

4 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 2
1 août 2005 à 12:52
Il faut déclarer les procedures et fonctions que tu utilises en stdcall (Convention WIN32)

Pour l'utilisation des strings en paramètre ou en tant que résultat de fonction, il faut impérativement déclarer "ShareMem" en tant que première unité dans les clauses USES. De plus il faudra fournir la DLL "DELPHIMM.DLL" avec ton application.
Sinon, tu as déjà opté pour une solution, utiliser des PChar (voir des ShortString)


Cordialement.


<HR>



Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 août 2005 à 10:22
ShareMem, c'est bien sympa, mais on peut chercher longtemps une close uses sous Visual Basic.

En ce qui concerne les PChar, ce n'est pas simple...

Ils faut que ceux-ci pointent sur une chaîne qui a de petites chances d'exister.

Donc pas sur une chaîne locale à la fonction de la dll.

Bizarrement, pas non plus sur une chaîne locale à la routine de l'exe...
(J'ai eu de gros problèmes à ce sujet)
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 2
2 août 2005 à 22:15
Sharemem c'est à mettre dans la déclaration de la DLL que tu crées, pas dans ton codeVB.

De plus, les PChar ne sont pas compliqué du tout à utiliser, il faut juste allouer la taille de ceux ci avant de s'en servir. Si tu veux utiliser un PChar afin de stocker un chemin de de 255 caractères maximum par exemple il faut créer un PChar pointant sur une zone de taille 255+1 (Pour le 0 final); bref rien de bien sorcier.

Cordialement.


<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 août 2005 à 11:31
Cimer WhiteHippo,

Dans, l'aide de Delphi, il parle de mettre ShareMem de partout lors de l'emplois d'une dll utilisant des String...

J'ai cependant fait quelques essais qui paraissaient concluant.

Mais j'ai décidé d'abandonner ShareMem.

Par contre, j'ai pas mal étudier les pointeurs sur chaînes.

Je vais faire un tuto sur les dll multilangages.

Mais je ne connais rien au C !

Dès que j'ai l'url de mon tuto, je la pose ici.
0