G crée une dll avec delphi, comment creer les .h et .lib pour le C++

G crée une dll avec delphi, comment creer les .h et .lib pour le C++ - Delphi/Pascal - Programmation

Marsh Posté le 04-07-2003 à 14:46:03    

Ma dll est faite sous delphi 5 . MAis elle doit etre utiliser par qqu'un qui programme en C++. Il me dit qu'il n'y a pas moyen de l'utiliser sans avoir le .h et .lib associer. Je ne lui avait fourni que la dll et les types de fonctions à appeler avec les différents arguments. Ca ne lui suffit apparement pas.
Donc comment je pourrait cree ces fichiers avec Delphi .
thx

Reply

Marsh Posté le 04-07-2003 à 14:46:03   

Reply

Marsh Posté le 04-07-2003 à 14:56:26    

Normalement il peut utiliser les fonctions LoadLibrary et GetProcAddress pour appeler tes fonction exportée grace à leur non, après à toi de t'arranger pour que les convetions d'appel et les types concordent. Y a des utilitaires qui existent pour chopper les fonction export"es d'une dll et leur numero ordinal, si jamais ça marche pas avec le nom de la fonction.
 
EDIT ça peut peut être aider:
 
GetProcAddress


Message édité par LetoII le 04-07-2003 à 15:01:50

---------------
Le Tyran
Reply

Marsh Posté le 04-07-2003 à 15:09:45    

Van_axl a écrit :

Je ne lui avait fourni que la dll et les types de fonctions à appeler avec les différents arguments. Ca ne lui suffit apparement pas.


 
il est soit nul soit paresseux [:ddr555]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 04-07-2003 à 15:13:50    

antp a écrit :


 
il est soit nul soit paresseux [:ddr555]


 
 :jap:


---------------
Le Tyran
Reply

Marsh Posté le 04-07-2003 à 15:21:18    

je pense qu'il est un peu des 2,  
bref je lui ai effectivement bien indiquer comment appeler les fonctions, et mes fonction sont declarer en stdcall (je lui est aussi dit ca )donc ca devrait noramelement passer , non ?  
Peut-etre faudrait -il que je les mettent en Cdelc ?

Reply

Marsh Posté le 04-07-2003 à 15:23:03    

C pas naicessaire, faut juste qu'il oublie pas de préciser le stdcall dans son code.


---------------
Le Tyran
Reply

Marsh Posté le 04-07-2003 à 21:36:14    

LetoII a écrit :

Normalement il peut utiliser les fonctions LoadLibrary et GetProcAddress pour appeler tes fonction exportée grace à leur non, après à toi de t'arranger pour que les convetions d'appel et les types concordent. Y a des utilitaires qui existent pour chopper les fonction export"es d'une dll et leur numero ordinal, si jamais ça marche pas avec le nom de la fonction.
 
EDIT ça peut peut être aider:
 
GetProcAddress


 
 
Ce programme dont tu parles, il m'interresse :)
Je peux me le procurer ou ?

Reply

Marsh Posté le 04-07-2003 à 23:57:04    

Yana a écrit :


 
 
Ce programme dont tu parles, il m'interresse :)
Je peux me le procurer ou ?


 
En général c des outilis fournis avec les compilos  [:spamafote]  
 
J'ai aps de nom précis en tête:
 
 [:google]


---------------
Le Tyran
Reply

Marsh Posté le 07-07-2003 à 15:11:23    

bon si je vous dis que une des fonctions est :
 
float Read(VOID);
 
float Read(VOID)
 {
 
 /* Insert Code Here */
 
 }
 
Est ce que qqu'un pourrait m'esrire vite fait un bout de code en C++ qui appelerai cette fonction dans la dll : " mydll.dll" .
thanks car je suis pas tres fort un C++

Reply

Marsh Posté le 07-07-2003 à 15:22:42    

un truc approximatif :
 


typedef float (*FP_READ)(void);
 
 
HINSTANCE module;
FP_READ Read;
float f;
module = LoadLibrary("mydll.dll" );
if(module)
{
  Read = (FP_READ)GetProcAddress(module, "Read" );
  if(Read)
    f = Read();
  FreeLibrary(module);
}


Message édité par antp le 07-07-2003 à 15:31:19

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-07-2003 à 15:22:42   

Reply

Marsh Posté le 07-07-2003 à 15:29:09    

ok thanx antp , je vais jeter un coup d'oeil j'ai pris Dev C++ pour le tester.

Reply

Marsh Posté le 07-07-2003 à 15:30:32    

j'ai édité après avoir testé ;) là ça compile mais faut voir si ça marche :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-07-2003 à 16:55:16    

je suis nul ou quoi !!  
J'ai simplement copier coller ton code mais ca passe carrement pas , il faut mettre des tucs précis en  au début du code en C++.
j'ai ca comme erreur :
 
4 C:\TEMP\C__~1\main.cpp
'HINSTANCE' is used as a type, but is not defined as a type.

Reply

Marsh Posté le 07-07-2003 à 17:01:51    

ça doit être défini dans windows.h je pense
mais tu mets un unsigned int et ça doit passer ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-07-2003 à 17:40:58    

pour le loadlibrary, je dois pas inclure un .h dans mon code ?

Reply

Marsh Posté le 07-07-2003 à 17:41:43    

probablement windows.h


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-07-2003 à 17:54:25    

ok apres, quelques bidouille, la syntaxe à l'air bonne ! mais y a des soucis de link, je vais ssayer de downloader borland c++ trial car je soupsonne dev C++ de bugger un peu.
Thanx antp (une fois de plus) je te tiendrais au courant.

Reply

Marsh Posté le 07-07-2003 à 18:29:20    

ouais enfin ce que j'ai donné c'est pas un code complet hein... tu as bien mis ça dans un main, WinMain, ou un truc du genre ? Enfin dans un truc qui est sencé être un programme Windows ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-07-2003 à 10:09:35    

bon voila, ca passe bien , j'ai enfin appeler la dll. Seulement avec Dev C++, ca passait pas, donc j'ai download borland C++ builder et la c'est nickel.
D'aillleur y a pas une version de borland C++ builder perso gatuite, un peu comme delphi car la celle que j'ai c'est entrprise trial , evaluation de 60 jours ?
Bon c'est trop le meme sujet, mais s'il le faut j'en créé un autre .
 @ +

Reply

Marsh Posté le 09-07-2003 à 10:17:21    

Non, il n'y en a pas :/
La version standard doit être dans les 100-120 ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-07-2003 à 17:54:33    

J'ai encore une question .
mon code marche pas mal, mais voila :
j'ai mon type et l'appel de ma dllqd on appuie sur un bouton.
 

typedef float (__stdcall *MYDLLFUNCF)(void );
 
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    HINSTANCE hinstDLL;
    MYDLLFUNCF ImpFuncDLL;
    float Rep;
 
    if ((hinstDLL=LoadLibrary("mydll.dll" ))) {
 
        ImpFuncDLL =  GetProcAddress(hinstDLL, "Read" );
        if (ImpFuncDLL) {
            Rep= ImpFuncDLL();
            ShowMessage(Rep);
        }
        FreeLibrary(hinstDLL);
    }else{
    ShowMessage("dll non présente" );
    }
 
}

Donc la le code est modifier mais normalement ce qui est en gras est du INT.
Donc j'ai voulu appeler une autre fonction de ma dll : Read, qui renvoie un float.
Seulement tell que j'ai modifié le code , il me sort une erreur à la ligne du 1er IF , comme quoi il peut pas convertir le int de GetProcAdress en Float de mon type : MYDLLFUNCF  

Reply

Marsh Posté le 09-07-2003 à 18:00:46    

Si ta fonction renvoie un int au lieu d'un float il faut modifier le typedef en conséquence...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-07-2003 à 18:07:27    

bas c'est ce que j'ai fait plus haut , mais j'ai l'erreur sur la ligne :
     ImpFuncDLL =  GetProcAddress(hinstDLL, "Read" );  
impossible de convertir int en float .
Donc vu que le impfuncdll est declarer par mon typedef en float, j'en deduis que c'est GetProcAddress qui est en int.
Mais comment faire pour que GetProcAddress soit float aussi ?


Message édité par van_axl le 09-07-2003 à 18:07:43
Reply

Marsh Posté le 09-07-2003 à 20:43:19    

ImpFuncDLL = (MYDLLFUNCF)GetProcAddress(hinstDLL, "Read" );  
 
 
comme je l'avais fait dans mon exemple en fait :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-07-2003 à 23:31:34    

exact ! bon j'essaie ca demain au boulot, ca devrait le faire !

Reply

Marsh Posté le 10-07-2003 à 09:45:42    

Eh yes, t'as une fois de plus raison, ca marche comme tu le dis juste avant. Franchement merci à toi pour l'aide que tu fourni dans ce forum.
Sinon uin autre truc totalement différent, j'ai essayer ton soft pour gere les film (antp movie ...) et il est bien génial, j'ai lonhtemp chercher un soft comme ca (plutot que de mettre ca dans un bete tableur en lignes). Et celui la donne exactement ce que j'attendias d'un tel soft. Bref félicitation. D'ailleur je me demandis si ca t'avais pris du temp pour le faire, car il y apas mal de script pour pas mal de site web de movies ! .
Bon sur ceux thx pour ton aide, @ +
 
Van_axl

Reply

Marsh Posté le 10-07-2003 à 09:51:26    

:D
bah ça prend du temps, mais comme c'est étalé sur plusieurs mois (en fait deux ans) je sais pas vraiment chiffrer ça.
 
Et les scripts je n'en ai fait que pour quatre ou cinq sites, le reste ce sont des gens qui me les ont envoyés ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed