Hallo zusammen!
Ich habe folgenden C-Header:
Delphi-Quellcode:
ISMM_API
HANDLE ISMM_Open(void);
ISMM_API BOOL ISMM_Close(
HANDLE hIsmm);
ISMM_API BOOL DIO_GetConfig(
HANDLE hIsmm, PWORD pwDioConfig);
ISMM_API BOOL DIO_GetInput(
HANDLE hIsmm, PWORD pwDioData);
ISMM_API BOOL DIO_SetOutput(
HANDLE hIsmm, WORD wDioData);
ISMM_API BOOL DIO_GetOutput(
HANDLE hIsmm, PWORD pwDioData);
Diese "Funktionen" werden von einer
DLL (ISMM.DLL) bereitgestellt. Nun muss ich diese in Delphi einbinden, das sieht so aus...
Delphi-Quellcode:
function ISMM_Open(): THandle;
stdcall;
external '
dll\ISMM.dll';
function ISMM_Close(
Handle: THandle): Boolean;
stdcall;
external '
dll\ISMM.dll';
function DIO_GetInput(
Handle: THandle; Pointer: Pointer): Boolean;
stdcall;
external '
dll\ISMM.dll';
und klappt bis hierher auch. Jetzt will ich in einer Prozedur mit DIO_GetInput einen Rückgabewert auslesen, also mache ich folgendes...
Delphi-Quellcode:
procedure TfrmRun.Button1Click(Sender: TObject);
var
IO_Handle: THandle;
IO_Result: Word;
begin
IO_Handle := ISMM_Open();
if not (IO_Handle = INVALID_HANDLE_VALUE)
then
begin
MessageDlg('
Handle OK', mtWarning, [mbOK], 0);
if (DIO_GetInput(IO_Handle, @IO_Result) = True)
then
begin
MessageDlg('
IO True', mtWarning, [mbOK], 0);
end
else begin
MessageDlg('
IO False', mtWarning, [mbOK], 0);
end;
MessageDlg(IntToStr(Integer(IO_Result)), mtWarning, [mbOK], 0);
end
else begin
MessageDlg('
Kein gueltiges Handle', mtWarning, [mbOK], 0);
end;
end;
Das
Handle ist OK und er springt zum Funktionsaufruf "DIO_GetInput". Dort bekomme ich einen Rückgabewert. Anschließend beendet sich aber mein Programm... also vermute ich eine Zugriffsverletzung! Was hab ich falsch gemacht?