[ bancika @ 27.10.2004. 22:24 ] @
Pozdrav svima.
Nabavio sam nesto sto mi treba, ali je pisano u C++. Srecom postoji dll.
Kod za importovanje funkcije u C++ glasi

Code:

IMPORTED_FN(int) Convert(const char *rtf, const char *html, r2hFlags Flags=0, const char *imgdir="");


i s' tim nema problema, ali kad prevedem na paskalski nece da radi.

Code:

 function Convert(const rtf, html: PChar; Flags: Longint = 0; ImgDir: PChar = ''): Integer; stdcall; external 'r2h.dll' name 'Convert';


da li sam ja lose preveo ili je nesto drugo po sredi, ali mi javlja za ovaj zadji parametar ImgDir gresku Constant expression expected.

Pokusao sam da stavim nil i kad pozovem funkciju iz delphija padne Access Violation greska.

Jel ima neko savet? Hvala unapred
[ reiser @ 28.10.2004. 00:17 ] @
Zar ne treba :
Code:
function Convert(const rtf, html: PChar; Flags: Longint = 0; const ImgDir: PChar = ''): Integer; stdcall; external 'r2h.dll' name 'Convert';
[ bancika @ 28.10.2004. 01:06 ] @
ma da, al i sa tim nece. uspeo sam da ga iskompajliram sa ImgDir = nil.
izgleda da nije u tome. taj dll exportuje vise funkcija. i nijedna nece da radi kako treba. ona odradi posao a posle toga pokaze access violation. bas cudno :) a imam program u C++ koji radi sam tim dll-om sasvim ok
[ reiser @ 28.10.2004. 06:16 ] @
A da promenis konvenciju za pozivanje (mislim da se tako zove ) ??
Umesto stdcall; probaj da stavis cdecl; ili nesto drugo...
[ bancika @ 28.10.2004. 14:20 ] @
probao sam i to, nista.
ne verujem da je do toga, jer se obe funkcije izvrse.
tek kada se izlazi iz procedure koja ih je pozvala, npr. Button1Click tada pukne greska. mnogo cudno :)
[ Rapaic Rajko @ 28.10.2004. 15:11 ] @
Ovako:
1) posto u onom kodu u C++-u (za import) nije eksplicitno navedena 'calling convention', to znaci da je dll pisan u C-u ili C++-u, pa se napipavaju. Znaci, mi moramo da stavimo cdecl konvenciju za import iz Pascal-a;
2) Dodela default vrednosti parametra PChar NECE raditi u samoj deklaraciji funkcije. Probaj ovako:
Code:

function Convert(const rtf, html: PChar; Flags: Longint = 0; const ImgDir: PChar): Integer; cdecll
; external 'r2h.dll' name 'Convert';


ali pre samog poziva te funkcije moras da deklarises parametar ImgDir:
Code:

  aImgDir := '';
  function Convert(artf, ahtml, aFlags, aImgDir);


Probaj pa javi

Rajko
[ bancika @ 28.10.2004. 15:58 ] @
to sam prvo probao,
ako ne stavim default vrednost onda mi kaze Default value for ImgDir is needed :)
[ Slavisa @ 28.10.2004. 18:16 ] @
Prilikom kompajliranja ?!
[ Milos D @ 28.10.2004. 18:21 ] @
Ako jedan parametar ima default vrednost, svi naredni takodje moraju imati default vrednost.

Zato, probaj da sklonis default vrednost i sa Flags parametra.
[ Rapaic Rajko @ 10.11.2004. 09:18 ] @
E, sta je bilo na kraju, zivo me zanima...si resio problem?

Rajko