Utiliser une DLL existante

cs_fred23 Messages postés 152 Date d'inscription lundi 5 août 2002 Statut Membre Dernière intervention 15 juillet 2006 - 28 janv. 2003 à 12:40
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 28 janv. 2003 à 13:18
%-6 Bonjour,

j'ai tourvé une DLL chez http://www.erlang-software.com/
et sous C cela s'ecrirais comme suit:
Je souhaite intégrer une DLL dans mes codes. Cette DLL serait à ecrire comme suite:

#include ?dll_erlc.h?

int iNumServ;
double dErlangs = 10.0;
double dADA = 20.0; //seconds
double dAHT = 3.0; //minutes
HINSTANCE hErlangCDLL;

hErlangCDLL = LoadLibrary(?erlangc.dll?);
iNumServ = ERLC_CalcNumServ (dErlangs, dADA/(dAHT * 60.0));
FreeLibrary(hErlangCDLL);

Qu'est ce qui doit aller dans les desclarations prive ou public et sous quelle forme.?
Est ce que ceci semble correctement ecrit.?
Merci pour votre aide car je n'arrive pas à faire tourner cette DLL qui lorsque je l'exploite sous VB fonctionne trés bien.

Fred.

1 réponse

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
28 janv. 2003 à 13:18
Salut,

Pour t'aider voici un exemple de chargement dynamique d'une dll sous delphi. J espere que cela t'aidera sinon n hésite pas a demander des renseignements.

Déclaration global :
Type
THautCond = Function(NbCondHaut,NbCondEnc : Integer; C,EpIsolCond,EpIsolSup,EpIsolPDroite,
EpCalePlan,EpCaleFond,EpLanguetteSousCale,ReqJeuHaut,TolCu : Double) : Double;
TLargCond = Function(NbCondLarg : Integer; A,EpIsolCond,EpIsolSup,EpIsolPDroite,
ReqJeuLarg,TolCu : Double) : Double;

Déclaration en local :
HautCond : THautCond;
LargCond : TLargCond;
DllInstance : THandle;

Appel de la dll :
Try
{Calcul de la largeur et l'epaisseur du ruban ideal}
DllInstance := LoadLibrary(AppelDll);

If DllInstance = 0 then
begin
{Impossible de charger la dll}
ShowMessage('Impossible de charger la dll : ' + AppelDll);
Results := False;
Exit;
end;

@HautCond := GetProcAddress(DllInstance,'HautCond');

If not(@HautCond = nil) then
{Lancement de la procedure de calculs}
ConsHtRub := HautCond(Round(Nfh1s),Round(Ncs),CoteCs,ConsIsolElem,Isps,
Ipds,Elecs,Eus,Elscs,JeuxMaxiHt,ToleCu)
else
begin
{Impossible de trouver la procédure}
ShowMessage('Impossible de trouver la procédure "HautCond" dans la dll');
Results := False;
Exit;
end;

@LargCond := GetProcAddress(DllInstance,'LargCond');

If not(@LargCond = nil) then
{Lancement de la procedure de calculs}
ConsLgRub := LargCond(Round(Nfl1s),CoteAs,ConsIsolElem,Isps,Ipds,
JeuxMaxiLg,ToleCu)
else
begin
{Impossible de trouver la procédure}
ShowMessage('Impossible de trouver la procédure "LargCond" dans la dll');
Results := False;
Exit;
end;
Finally
FreeLibrary(DllInstance);
end;
0
Rejoignez-nous