|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : août 2002 Messages : 130 ![]() |
bonjour,
j'ai ecrit 3 dll en delphi 6 contenant des fonctions appelées via des UDF contenu dans une base Firebird (1.5). Cela fonctionne plutot pas mal sauf que lorsque j'ai utilisé simultanement les DLLs en appelant les fonctions U DF via triggers/procedures stockées, j'ai le message ' runtime error 216 ' lorsque je me deconnecte de la base. Pour infos tous mes parametres de fonctions sont de types pchar. Suis je limité à une seule DLL contenant toutes mes fonctions ??? |
|
|
00
|
|
|
#2 | |
|
Membre confirmé
![]() Olivier MuetResponsable de service informatique Inscription : septembre 2003 Messages : 222 ![]() |
Citation:
Il y aurait plutôt un problème d'utilisation des PChar. Dans la mesure où les PChar sont des pointeurs, il est nécessaire que la référence soit maintenue (sinon ils ne pointeront plus sur rien du tout). Dans les UDF, on utilise ne général une variable locale à l'unité (globale en fait) qui est celle sur laquelle pointe la fonction. Ton RTE provient certainement de là |
|
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : août 2002 Messages : 130 ![]() |
merci de ta participation...toutes mes fonctions sont déclarés comme cela :
interface function Mafonction (param1 : pchar) : pchar; stdcall; implementation function Mafonction (param1 : pchar) : pchar; Mon code par contre au niveau de la déclaration de l'UDF dans Firebird mon parametre est un CSTRING(xx) return by reference (FREE IT). En utilisant FREE IT j'ai cru comprendre que Firebird se chargeait de liberer la memoire ??? |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Olivier MuetResponsable de service informatique Inscription : septembre 2003 Messages : 222 ![]() |
En tous cas, il faut utiliser cdecl et pas stdcall
|
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : août 2002 Messages : 130 ![]() |
j'ai passé toute mes fonctions avec cdecl mais j'ai toujours le message lors de la deconnexion
|
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : août 2002 Messages : 130 ![]() |
j'ai regroupé toutes les fonctions dans une et même seule DLL et je n'ai plus le message....et je comprends pas pourquoi...de ce fait j'ai peur que ça masque un autre probléme...
|
|
|
00
|
|
|
#7 | ||||
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
l'erreur 216 et probablement due à un problème de libération mémoire, plutôt que de bricoler avec des malloc et des "free it" il est plus sage d'utiliser ce type de structure, en voici un exemple, cela sera plus simple à comprendre.
Code :
et dans cet exemple, plus besoin de se prendre le choux de savoir qui libère quoi! un autre exemple plus complexe? Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com