![]() |
Mal wieder C++ DLL & Delphi
Hallo,
hänge mal wieder an einer DLL Anbindung. Aus der C++ .h Datei:
Code:
Normalerweise hat das mit anderen DLL´s immer so funktioniert:
// Function export for C and Visual Basic
__declspec(dllexport) int __stdcall GetDevInfo(char* mystring);
Code:
Beim Aufruf knallt´s dann aber gar fürchterlich....
function GetDevInfo(Answer:PAnsiChar):integer; stdcall ; external 'MyDevice.dll';
Gruss Calli |
AW: Mal wieder C++ DLL & Delphi
Hallo,
char* ist ein pointer normalerweise lässt sich der für Delphi mit pAnsiChar oder pChar ersetzen. Grüße Klaus |
AW: Mal wieder C++ DLL & Delphi
Was soll die Methode denn machen? Du scheinst ihm einen Zeiger geben zu sollen wo er Text reinschreibt. Was gibst du ihm denn? Hast du Speicherbereich angelegt? Steht in der Doku wie viel Speicher das sein soll?
|
AW: Mal wieder C++ DLL & Delphi
Hi,
da soll ein Revision - String drinstehen. Länge unbekannt.. Dank fehlender Code-Kennzeichnung ist oben aus meinen PAnsichar der Smily geworden.. Hab PChar und PAnsichar probiert. Immer Access Violation. |
AW: Mal wieder C++ DLL & Delphi
Du musst Speicher für die Rückgabe reservieren.
Delphi-Quellcode:
var info: Array[0..255] of AnsiChar; // Hab mal 256 Bytes genommen. Musst mal schauen wie viel du ca. brauchst.
begin FillChar(info, SizeOf(info), 0); GetDevInfo(@info[0]); ShowMessage(info); end; |
AW: Mal wieder C++ DLL & Delphi
Super, danke dir !! Passt. Logisch eigentlich....
Dann hab ich noch eine Send/Receive Funktion. Also in einem Turn Kommandos ans Gerät und Antwort bekommen. __declspec(dllexport) int __stdcall STM_CMD(char *StringCmd, char *StringReply); Wie sollte ich das angehen ? Danke und Gruss Calli |
AW: Mal wieder C++ DLL & Delphi
Hallo,
genau wie die andere Funktion, nur das es jetzt 2 Strings sind.
Delphi-Quellcode:
Und gerade beim 2. Parameter wieder vorher Speicher holen.
function blap(param1: PAnsiChar; param2: PAnsiChar): Integer; stdcall;
|
AW: Mal wieder C++ DLL & Delphi
Passt...danke.
Per Param1 muss ein Hex Kommando ( Array of Bytes, 1-20 Bytes je nach Kommando / Daten ) an die DLL übergeben werden. Das muss ich nun noch irgendwie "umbiegen". |
AW: Mal wieder C++ DLL & Delphi
Hallo,
dann nimm einen Record mit 20 Bytes. und übergib immer den Record als ganzes. Das erspart Dir einerseits die Pointer-Hampelei und macht außerdem das Debugging einfacher.
Delphi-Quellcode:
var
type
TByteArray=packed record B1: Byte; B2: Byte; ... B20: Byte; end; A: TByteArray; begin FillChar(A, SizeOf(A), #0); BlaBlub(Pointer(@A), [DELPHI] Das Pointer() nimmst Du, falls der Compiler meckert. Die tatsächliche Länge interessiert ja eh nur die Dll. |
AW: Mal wieder C++ DLL & Delphi
Als Ergänzung:
"Pitfalls of converting" von Rudy Velthuis: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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