AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi DLL / C-Header einbinden - Zugriffsverletzung
Thema durchsuchen
Ansicht
Themen-Optionen

DLL / C-Header einbinden - Zugriffsverletzung

Ein Thema von NetSonic · begonnen am 20. Mai 2009 · letzter Beitrag vom 20. Mai 2009
Antwort Antwort
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#1

DLL / C-Header einbinden - Zugriffsverletzung

  Alt 20. Mai 2009, 16:46
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?
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#2

Re: DLL / C-Header einbinden - Zugriffsverletzung

  Alt 20. Mai 2009, 17:53
Hat sich erledigt!

War ein Fehler in der Funktion der DLL. Neue Version hat das Problem nicht mehr!

Gruß
NetSonic
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz