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: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
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
Marsh Posté le 04-07-2003 à 15:13:50
ReplyMarsh 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 ?
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.
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. |
Ce programme dont tu parles, il m'interresse
Je peux me le procurer ou ?
Marsh Posté le 04-07-2003 à 23:57:04
Yana a écrit : |
En général c des outilis fournis avec les compilos
J'ai aps de nom précis en tête:
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++
Marsh Posté le 07-07-2003 à 15:22:42
un truc approximatif :
|
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.
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
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.
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
Marsh Posté le 07-07-2003 à 17:40:58
pour le loadlibrary, je dois pas inclure un .h dans mon code ?
Marsh Posté le 07-07-2003 à 17:41:43
probablement windows.h
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.
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 ?
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 .
@ +
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 ?
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
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...
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 ?
Marsh Posté le 09-07-2003 à 20:43:19
ImpFuncDLL = (MYDLLFUNCF)GetProcAddress(hinstDLL, "Read" );
comme je l'avais fait dans mon exemple en fait
Marsh Posté le 09-07-2003 à 23:31:34
exact ! bon j'essaie ca demain au boulot, ca devrait le faire !
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
Marsh Posté le 10-07-2003 à 09:51:26
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
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