Tworzenie pliku DLL (źródło C) dla PowerBuilder 9.0

Tworzenie pliku DLL (źródło C) dla PowerBuilder 9.0
  • Rejestracja: dni
  • Ostatnio: dni
0

Utworzyłem sobie dla przykładu prosty kod w C:

Kopiuj
#include <stdio.h>
int test1(int param);
int test1(int param)
{
return param;
}

Później tworzę plik DLL w ten sposób:

Kopiuj
gcc -c mydll.c
gcc -shared -o mydll.dll mydll.o

Wrzucam go do projektu PB, ale dostaję błąd.

W PB:

  1. Utworzyłem funkcję (Local External Function):
    FUNCTION Integer test1(integer param) LIBRARY "mydll.dll"

  2. I w kodzie:

Kopiuj
integer xx, yy
yy = 2
xx = test1(yy)
MessageBox("test", String(xx))

Dostaję błąd, jak w linku http://pokazywarka.pl/st7i1h/. Bez przekazywania parametrów działa.
Jak więc przekazywać poprawnie parametry?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie znam się na PowerBuilderze, ale wygląda mi to na niezgodną konwencję wywołania funkcji.
Spróbuj dodać jakieś __stdcall do funkcji.

  • Rejestracja: dni
  • Ostatnio: dni
0

Próbowałem tak:

Kopiuj
#include <stdio.h>
int __stdcall test1(int param);
int __stdcall test1(int param)
{
return param;
} 

Ten sam błąd.

  • Rejestracja: dni
  • Ostatnio: dni
0

Z __stdcall'em i extern inny błąd: http://pokazywarka.pl/uq0t42/

Kopiuj
#include <stdio.h>

extern int __stdcall desr(int param);

extern int __stdcall desr(int param)
{
return param;
} 
NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

Spróbuj zadeklarować tego inta w builderze jako 16bitowego.
Zrób test z tą pierwszą wersją.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.