Witam wszystkich
Borykam sie z problemm wykorzystania DLL'ki napisanej w C++ (prawdopodobnie). DLL-ka zapewnia komunikację po RS232 z pewnym urządzeniem.
W C++ dobiera sie do tego wg ponizszego sposobu
Pierwszym argumentem każdej funkcji jest wskaźnik na strukturę CDL_Struct. Dlatego przed rozpoczęciem wywoływania funkcji bibliotecznych, należy powyższą strukturę zainicjalizować. Służy do tego funkcja:
CDL_Struct* cdl_init();
Po zakończeniu pracy z biblioteką, należy zwolnić pamięć zajmowaną przez otrzymaną strukturę. Służy do tego funkcja:
void cdl_free(CDL_Struct *cdls);
Przed rozpoczęciem wywoływania funkcji bibliotecznych, należy również wskazać i otworzyć używany port COM. Służy do tego funkcja:
int cdl_OpenCom(CDL_Struct *cdls, int comNb, int baudRate);
Zamknięcie portu COM umożliwia funkcja:
void cdl_CloseCom(CDL_Struct *cdls);
Udało mi sie juz to odpalic w delphi, skladnia ponizej
//deklaracja funkcji w DLL
function cdl_init:pointer; cdecl external 'sd660.dll' name 'cdl_init';
function cdl_OpenCom(CDL_Struct:pointer; comNb,baudRate : integer):integer; cdecl external 'sd660.dll' name 'cdl_OpenCom';
procedure cdl_CloseCom(CDL_Struct:pointer); cdecl external 'sd660.dll' name 'cdl_CloseCom';
procedure cdl_free(CDL_Struct:pointer); cdecl external 'sd660.dll' name 'cdl_free';
function RT_0_OdbierzNrSeryjny(CDL_Struct:pointer; HEAD:char; P_WERSJA, P_TEXT, P_RODZAJ, P_DT_SET, P_ODP_CZ:pointer):integer; cdecl external 'sd660.dll' name 'RT_0_OdbierzNrSeryjny';
//*WERSJA, char *TEXT, char *RODZAJ, char *DT_SET, byte *ODP_CZ
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
cdls:=nil;
cdls:=cdl_init;
if (cdls = nil) then
begin
showmessage('Blad inicjalizacji biblioteki');
exit;
end;
if (cdl_OpenCom(cdls, 1, 1200) <> 0) then
begin
showmessage('Blad otwierania portu COM');
exit;
end;
cdl_CloseCom(cdls);
cdl_free(cdls);
end;
I powiedzmy ze wszystko wskazuje ze działa....
ale
potrzebuje cos odczytac, np. numeru wersji programu i opisu i funkcja do tego jest następująca
int __cdecl RT_0_OdbierzNrSeryjny(CDL_Struct *cdls, char HEAD, char *WERSJA, char *TEXT, char *RODZAJ, char *DT_SET, byte *ODP_CZ)
i tu jest problem
bo jak rozumiem funkcja parametryzuje sie przez wskaźniki, tylko pytanie jak je zadeklarowac i uzyc...
po uzyciu funckji w formie
RT_0_OdbierzNrSeryjny(cdls,#1,P_WERSJA, P_TEXT, P_RODZAJ, P_DT_SET, P_ODP_CZ)
program wywala błąd w module msvcrt.dll, nie wiem czy to dla tego ze ja tych wskaźników wczesniej nie zdefiniowałem??
Pomoc mile widziana
:)