![]() |
Funktionsaufruf aus C-dll mit Access Violation
Hallo zusammen,
versuche gerade eine C-DLL in Delphi zu implementieren. Habe eine Unit für das Funktionsprototyping angelegt. Leider bekomme ich beim Aufruf der ersten Funktion schon eine AccesViolation. Hier mal die Beispielcodes: Funktion aus der C-Header Datei: M1COM H_TARGET TARGET_Create(CHAR* address, PROTOCOL protocol, UINT32 timeout); So sieht der Funktionsprototyp dazu aus: FUNCTION TARGET_Create ( address : PChar; protocol : PROTOCOL; timeout : LONGWORD ) : H_TARGET; stdcall; external 'm1com.dll'; Und hier der Aufruf in meinem Programm: MyTarget := Target_Create ( @TargetString, TCP, g_Timeout ); Der Fehler kommt aber nicht direkt beim Aufruf, sondern beim verlassen des OnClick ereignisses eines Buttons, mit dem ich den Aufruf starte. Hat jemand von Euch eine Idee? Was habe ich falsch gemacht? Danke schon jetzt für Eure Mühe. Schöne Grüße Rainer |
AW: Funktionsaufruf aus C-dll mit Access Violation
Stimmt die Aufrufkonvention stdcall? Ist TargetString ausreichend groß? Wie ist es so?
Delphi-Quellcode:
MyTarget := Target_Create ( @TargetString[1], TCP, g_Timeout );
|
AW: Funktionsaufruf aus C-dll mit Access Violation
Hallo Detlef,
geht so leider auch nicht. Hier die Deklaration der Variablen. VAR g_Timeout : LONGWORD = 3000; MyTarget : ^H_TARGET; TargetString : STRING; Danke für Eure Hilfe Rainer |
AW: Funktionsaufruf aus C-dll mit Access Violation
Zeig uns doch am Besten mal die ganze aufrufende Routine (zumindest den relevanten Teil).
|
AW: Funktionsaufruf aus C-dll mit Access Violation
Hier der Aufruf:
Delphi-Quellcode:
Nach dem ich wie oben die Stringlänge ( STRING[255] ) angegeben habe, kommt keine AccessViolation mehr.
procedure TForm1.Button1Click(Sender: TObject);
VAR TargetString : STRING[255]; begin // Target Create TargetString := PBEdit1.Text; MyTarget := Target_Create ( @TargetString, TCP, g_Timeout ); IF ( MyTarget <> NIL ) THEN Label2.Caption := 'Target_Create : done' ELSE Label2.Caption := 'Target_Create : Error '; // Buttons Button1.Enabled := FALSE; Button2.Enabled := TRUE; end; Dafür beim Aufruf der nächsten Funktion :-) Danke und Gruß Rainer |
AW: Funktionsaufruf aus C-dll mit Access Violation
Deklariere TragetString als PChar oder rufe die Funktion mit @TargetString[1] auf.
|
AW: Funktionsaufruf aus C-dll mit Access Violation
Delphi-Quellcode:
So würde ich es versuchen.
procedure TForm1.Button1Click(Sender: TObject);
VAR TargetString : STRING; begin SetLength(TargetString, 255); MyTarget := Target_Create ( @TargetString[1], TCP, g_Timeout ); SetLength(TargetString, StrLen(PChar(TargetString))); ... end; |
AW: Funktionsaufruf aus C-dll mit Access Violation
Hallo,
habe nun beim aufruf dieser Funktion kein Problem mehr. Dafür beim Aufruf der nächsten :-(
Delphi-Quellcode:
Hier kommt wieder eine Accessviolation nicht beim Aufruf der Funktion sondern nach dem Ende von Button2Click.
C-Funktion:
SINT32 TARGET_Connect(H_TARGET targetHandle, CHAR* user, CHAR* password, CHAR* toolName); Delphi Prototyp: FUNCTION TARGET_Connect ( targetHandle : H_TARGET; user, password, toolName : PChar ) : LONGINT; stdcall; external 'm1com.dll'; Aufruf: procedure TForm1.Button2Click(Sender: TObject); VAR RetCode : LONGINT; User : STRING[255] = 'user'; PWD : STRING[255] = 'password'; ToolName : STRING[255] = 'M1ComTest'; begin // Target Connect RetCode := TARGET_Connect ( MyTarget, @User[1], @PWD[1], @ToolName[1] ); Label3.Caption := 'ReturnCode : ' + IntToStr ( RetCode ); end; Danke für Eure Hilfe. Schöne Grüße Rainer |
AW: Funktionsaufruf aus C-dll mit Access Violation
Da bei Shortstrings kein abschließendes #0 garantiert ist, versuch es einmal mit
Delphi-Quellcode:
User : STRING[255] = 'user'+#0;
PWD : STRING[255] = 'password'+#0; ToolName : STRING[255] = 'M1ComTest+#0'; |
AW: Funktionsaufruf aus C-dll mit Access Violation
Delphi-Quellcode:
Hat leider auch nichts gebracht.
User : STRING[255] = 'user'+#0;
PWD : STRING[255] = 'password'+#0; ToolName : STRING[255] = 'M1ComTest+#0'; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz