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

:)