Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mal wieder C++ DLL & Delphi (https://www.delphipraxis.net/203000-mal-wieder-c-dll-delphi.html)

calibra301 2. Jan 2020 11:58


Mal wieder C++ DLL & Delphi
 
Hallo,
hänge mal wieder an einer DLL Anbindung.
Aus der C++ .h Datei:

Code:
// Function export for C and Visual Basic

__declspec(dllexport) int __stdcall GetDevInfo(char* mystring);
Normalerweise hat das mit anderen DLL´s immer so funktioniert:

Code:
function GetDevInfo(Answer:PAnsiChar):integer; stdcall ; external 'MyDevice.dll';
Beim Aufruf knallt´s dann aber gar fürchterlich....


Gruss
Calli

Klaus01 2. Jan 2020 12:06

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

Der schöne Günther 2. Jan 2020 12:18

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?

calibra301 2. Jan 2020 12:28

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.

Neutral General 2. Jan 2020 12:33

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;

calibra301 2. Jan 2020 13:25

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

hoika 2. Jan 2020 13:42

AW: Mal wieder C++ DLL & Delphi
 
Hallo,
genau wie die andere Funktion, nur das es jetzt 2 Strings sind.

Delphi-Quellcode:
function blap(param1: PAnsiChar; param2: PAnsiChar): Integer; stdcall;
Und gerade beim 2. Parameter wieder vorher Speicher holen.

calibra301 3. Jan 2020 05:53

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".

hoika 3. Jan 2020 06:41

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:
type
  TByteArray=packed record
    B1: Byte;
    B2: Byte;
    ...
    B20: Byte;
  end;
var
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.

A.ndreas 3. Jan 2020 09:19

AW: Mal wieder C++ DLL & Delphi
 
Als Ergänzung:

"Pitfalls of converting" von Rudy Velthuis:

http://rvelthuis.de/articles/articles-convert.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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