[ icobh @ 11.10.2006. 22:00 ] @
Mučim se već 2 sata, ne mogu da skontam gdje griješim. Naime, napisao sam jedan DLL u C-u i pozivam f-ju iz te biblioteke iz VB-a. Evo kako izgleda sporna f-ja:

Code:
DLLIMPORT void Save (long pos, int brl){
          
FILE *T;

T=fopen("Greska.txt","w");

fprintf(T,"%ld %d",pos,brl);

fclose(T);      
}


A ovako deklarišem i pozovem iz VB Programa:

Code:
Private Declare Function Save Lib "test.dll" (ByVal a As Long, ByVal b As Integer) As Variant

Private Sub Command1_Click()
    Save 48, 49
End Sub 


Ali kad odem u ovaj fajl (Greska.txt) tamo umjesto 48 49 imam 1242340 48! Ili nekad zna biti 1242350 1242354! Ovo mi mnogo liči na adrese ali odakle ovo 48 kao drugi broj, kada sam mu ja proslijedio kao prvi? Da li sam negdje pogriješio ili šta već, ovo počinje da me nervira!


[Ovu poruku je menjao icobh dana 12.10.2006. u 10:54 GMT+1]
[ Buffy @ 12.10.2006. 12:08 ] @
Vjerovatno se radi o drugacijem tipu poziva funkcije.
Kao sto znas ima vise tipova poziva: __fastcall, __stdcall, __pascal ...
Pokusaj saznati koju vrstu poziva po defaultu koristi visual basic pa onda ispred definicije funkcije stavi
__fastcall, __stdcall ili neki drugi.
npr.
Code:

__fastcall DLLIMPORT void Save (long pos, int brl)

to je prvo sto mi pada na pamet.
Mozda sam napravio gresku u kodu.
pozdrav!
[ icobh @ 12.10.2006. 13:47 ] @
Isprobao sam sve mogućnosti, vidio sam da fastcall mijenja one vrijednosti ali ne u željene! Izgleda da je problem u mom GCC kompajleru!

P.S. Otklonio sam "kvar"! Kvaka je u GCC-u, jer je to compiler prvenstveno za unixoide, stoga koristi drugačiji poziv funkcija, tj. __cdecl.

Rješenje sa našao ovdje: http://www.mingw.org/MinGWiki/...747374cbb2c70240ba7acf65a1bc5c

To je baš ono što mi je trebalo

[Ovu poruku je menjao icobh dana 12.10.2006. u 20:37 GMT+1]