[C++] Dll, comment ça marche ?

Dll, comment ça marche ? [C++] - Programmation

Marsh Posté le 06-03-2001 à 03:29:13    

Voilà, j'aimerai utiliser une DLL dans mon programme. Mais voilà la doc de Borland C++ builder 4.0 est pour une fois très obscure à ce sujet ! Je ne connais rien au Win32 (malheureusement !) et je patauge...
Alors voilà, ma DLL se nomme vStrip_css.dll, je l'ai placée dans le même répertoire que mon projet (ou est mon exécutable quoi). J'ai pigé qu'il faut utiliser LoadLibrary() puis GetProcAddress() mais là cela deviens obscur pour moi ! Comment faire ??? Une bonne âme pour m'indiquer la méthode (ou une page web qui explique ça...).
De plus, comment savoir le type de variable retourné par ma DLL et les fonctions de celle-ci ??? J'ai bien le source mais j'y pige rien... :(
 
Merci d'avance.


---------------
A+++ Bruce - http://www.bheller.com
Reply

Marsh Posté le 06-03-2001 à 03:29:13   

Reply

Marsh Posté le 06-03-2001 à 10:33:27    

Pour utliser une dll tu doit avoir un header (.h) en C qui te donne le nom des fonctions et les type retourné et attendus.
 
Sinon il existe des programmes qui te donne le nom des fonctions d'une dll mais sans les type des variables.

Reply

Marsh Posté le 06-03-2001 à 10:43:18    

Salut !
 
Je sais que sous VC++ tu peux faire qqch du genre
#import "ma_dll.dll"
et que ça te génère ensuite un fichier où tu as les prototype des fonctions de la dll...
Par contre, je ne sais pas si ça marche avec Borland ?
 
A++

 

--Message édité par Wisetechi--

Reply

Marsh Posté le 06-03-2001 à 10:47:12    

#import "ma_dll.dll"  ne marche que pour les dll qui contiennent des ActiveX.

Reply

Marsh Posté le 06-03-2001 à 10:57:21    

Arg, zut, je me disais bien aussi....
 
A++

Reply

Marsh Posté le 06-03-2001 à 10:57:41    

hello,
 
Alors sous Builder, pour utiliser les fonctions d'une Dll , il faut passer par des pointeurs de fonction (obligatoire pour les dll fabriquées avec fenetre visual xx car kro$ ne respecte pas le format qu'il a imposé... hum... sans commentaires).
 
tu fais comme ça:
 
HINSTANCE Hdll =LoadLibrary(nomdelalaibairie);
 
pFonction =  
(FARPROC) pFonction = GetProcAddress(Hdll,"nom de la fonction" );
 
ensuite, tu peux utiliser ta fonction:
int ret = pFonction( toto1, toto2);
 
voili ;)
 
Par contre, truc a savoir parce que je me suis pris la tête la dessus pour trouver:
 
Micro$ utilise des appels pascal pour les fonctions C et C++. Donc si la dll a été faite avec Micro$, attention au format de ta fonction!
C'est ce qui m'est arrivé, et pour contourner le truc, j'ai déclaré mon pointeur sur fonction comme ça:
 
int pascal pFonction (int toto1, int toto2);
 
voili. J'espere que tu t'en sortiras avec ça.

Reply

Marsh Posté le 06-03-2001 à 11:03:32    

On est pas obligé, il y a un utilitaire (coff2omf.exe) dans le rep "bin" des Borland C++. Il crée des .lib au format Borland à partir des .lib Microsoft de Visual.

Reply

Marsh Posté le 06-03-2001 à 11:19:25    

Je suis preneur pour ma culture aussi :)


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 06-03-2001 à 11:26:40    

Visiblement les fonctions exportées de cette dll sont :
const char *vs_get_time(const double time);
 
t_vs_errorcode vs_init(tp_vs_data vsd, t_vs_streamflags streams[256], t_vs_streamflags substreams[256]);
 
t_vs_errorcode vs_strip_one_block(tp_vs_data vsd, t_vs_streamflags streams[256], t_vs_streamflags substreams[256], dword num_idl, tp_vs_vobcellid idl);
 
t_vs_errorcode vs_strip(tp_vs_data vsd, t_vs_streamflags streams[256], t_vs_streamflags substreams[256], dword num_idl, tp_vs_vobcellid idl);
 
t_vs_errorcode vs_done(tp_vs_data vsd, t_vs_streamflags streams[256], t_vs_streamflags substreams[256]);
 
ifo_t *ifoOpen(const char *name);
 
bool ifoClose (ifo_t *ifo);
 
int ifoGetNumPGCI(const ifo_t *ifo);
 
int ifoGetPGCIInfo(const ifo_t *ifo, const dword title, byte time_out[4]);
 
bool ifoGetPGCICells(const ifo_t *ifo, const dword title, tp_vs_vobcellid cells);
 
Mais je suppose que je ne t'apprends pas grand chose puisque tu as les sources....
 
A++

Reply

Marsh Posté le 06-03-2001 à 13:08:43    

Ben moi je suis sous VC++, et j'y connaissais rien avant, alors j'ai créé un projet DLL avec l'option qui fait qu'il y a déjà plein de choses écrites dans ton projet, et j'ai repris la même chose dans mon projet, ça fonctionne au poil ...

Reply

Marsh Posté le 06-03-2001 à 13:08:43   

Reply

Marsh Posté le 06-03-2001 à 13:19:56    

Je m'attendais pas à tant de réponses ;)
Merci à tous ! Je vais expérimenter ça ;)
 
Wisetechi : en effet j'ai les sources mais c sympa d'avoir résumé le truc ;)


---------------
A+++ Bruce - http://www.bheller.com
Reply

Sujets relatifs:

Leave a Replay

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