![]() |
DLL einbinden Delphi7 vs Rad Studio 10.2
Hallo,
nach langer Zeit möchte ich wieder was mit Delphi programmieren und verzweifle am neuen RAD Studio.. Ich möchte die ngspice.dll einbinden, Delphi 7 klappt ohne probleme. Doch der selbe Code funktioniert nicht im RAD Studio, sobald ich eine Funktion aus der DLL aufrufe gibt es eine Zugriffsverletzung. ![]() Kann mir einer erklären warum es nicht auf der neuen Umgebung/Compiler nicht funktioniert? Grüße |
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Wenn Du auch noch den Code zeigen könntest wie Du mit der dll umgehst... könnte hilfreich sein bei Fehlersuche.
|
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Glaskugel sagt: "Mutt du achten auf Ansi und Uniode."
|
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Sorry habe das bin Link geposted.. Sources:
![]() oder :
Code:
ngspice_Init: function(ptrchar: Pointer; ptrstat: Pointer; ptrexit: Pointer;
ptrdata: Pointer; ptrinitdata: Pointer; ptrnoruns: Pointer; userData: Pointer): integer; cdecl; ngspice_Com: function(ms: PChar): Integer; cdecl; ngspice_GetVec: function(ms: PChar): pVector_info; cdecl; ngspice_SendCirc: function(circarray: pcarray): Integer; cdecl; ngspice_GetCurPlot: function(): PChar; cdecl; ngspice_GetPlotNames: function(): ppansichararray; cdecl; ngspice_GetVecsFromPlot: function(plotname: PChar): ppansichararray; cdecl; ngspice_Running: function(): boolean; cdecl; ngspice_Init_Sync: function(ptrvsrcval: Pointer; ptrisrcval: Pointer; ptrsync: Pointer; ident: PInteger; userData: Pointer): integer; cdecl; ngspice_SetBkpt: function(simtime: double): boolean; cdecl; // attach ngspice.dll and initialize ngspice procedure TForm1.Button1Click(Sender: TObject); var init_test: integer; ng_ident: integer; begin // load dll Hdll := LoadLibrary(PChar(StartIni.ReadString('ngspice.dll', 'Path', ''))); if (Hdll = 0) then // try local directory Hdll := LoadLibrary('ngspice.dll'); if (Hdll <> 0) then begin @ngspice_Init := GetProcAddress(Hdll, 'ngSpice_Init'); @ngspice_Com := GetProcAddress(Hdll, 'ngSpice_Command'); @ngspice_GetVec := GetProcAddress(Hdll, 'ngGet_Vec_Info'); @ngspice_SendCirc := GetProcAddress(Hdll, 'ngSpice_Circ'); @ngspice_GetCurPlot := GetProcAddress(Hdll, 'ngSpice_CurPlot'); @ngspice_GetPlotNames := GetProcAddress(Hdll, 'ngSpice_AllPlots'); @ngspice_GetVecsFromPlot := GetProcAddress(Hdll, 'ngSpice_AllVecs'); @ngspice_Running := GetProcAddress(Hdll, 'ngSpice_running'); @ngspice_Init_Sync := GetProcAddress(Hdll, 'ngSpice_Init_Sync'); @ngspice_SetBkpt := GetProcAddress(Hdll, 'ngSpice_SetBkpt'); // call initialization // send addresses of callback functions, and address of sending object init_test := ngspice_Init(@ng_getchar, @ng_getstat, @ng_exit, @ng_data, @ng_initdata, @ng_thread_runs, self); // init_test := ngspice_Init(@ng_getchar, nil, @ng_exit, @ng_data, // @ng_initdata, @ng_thread_runs, self); if (init_test = 1) then begin detach(coquit); end; ng_ident := 5; init_test := ngspice_Init_Sync(@ng_sendvsrc, @ng_sendisrc, @ng_sync {nil} , @ng_ident, self); if (init_test = 1) then begin detach(coquit); is_attached := false; end; will_detach := False; is_attached := True; end else begin MessageDlg('ngspice.dll not found', mtError, [mbAbort], 0); Form1.Close; end; end; |
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
PChar durch PAnsiChar ersetzen!
Was du auch in nahtzu allen Tutorials und Beiträgen bezüglich Unicode-Umstellung nachlesen kannst. Außerdem greift man NIEMALS auf diese hässlichen globalen Variablen zu, welche genauso heißen, wie die Form, aus deren Events du das aber machst.
Delphi-Quellcode:
Wenn, dann
procedure TForm1.Button1Click(Sender: TObject);
begin Form1.Close;
Delphi-Quellcode:
oder nur
Self.Close
Delphi-Quellcode:
.
Close
Und die Meldung "ngspice.dll not found" ist irreführend. "not loaded" wäre passender, oder eben garnicht erst den Fehler verfälschen und den korrekten Fehler ausgeben, also "ngspice.dll not loaded" + ![]() ![]() |
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Zitat:
Ich möchte hiermit ihre ordnungsgemäße Funktion bestätigen :lol: Es lag an der Kodierung... Vielen Dank Luckie! |
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Das ist eine Beispiel/Test Anwendung für die ngspice dll, der Code stammt nicht von mir. (Auch wenn ich nicht wirklich fit bin hätte ich bestimmt nur Close verwendet :stupid: )
Danke auch dir himitsu =) |
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Ich las gerade das Du DLL mit einer CDECL Anweisung öffnest, da sollte dann immer der Memory Manager von Delphi an erster Stelle mitkompiliert werden, sonst kann es bei Daten-Übertragung (.exe <-> .dll) zu fehlern kommen.
|
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Zitat:
gruss |
AW: DLL einbinden Delphi7 vs Rad Studio 10.2
Nur wenn man Delphi-Strings verwendet.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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 by Thomas Breitkreuz