Hallo,
ich kenne mich leider nicht gut mit Zeigern aus und muss jetzt eine fremde
dll einbinden, die viel mit Zeigern arbeitet. Funktionen ohne Zeiger vom Typ char** konnte ich erfolgreich einbinden, aber mit bekomme ich es einfach nicht übersetzt.
Nach vielen Stunden des vergebenen Suchens möchte nun hier um Hilfe bitten.
Die
Dll (in c geschrieben) hat eine einfache function, die nur eine LogMessage und deren Länge zurückgibt. Die Definition ist laut Hersteller wie folgt:
Code:
short int readLogMessage(unsigned char **logMessage,
unsigned long int *logMessageLength);
Ich habe u. a. versucht, dies so zu übersetzen:
Code:
function readLogMessage(logMessage:ppAnsiChar;
logMessageLength:PWORD):integer;stdcall;external 'fremdedll.dll';
Um an die Logmessage zu kommen habe ich mir folgenden Code überlegt, der leider nicht wirklich funktioniert:
Code:
type
TArrayOfAnsiChar = array of AnsiChar;
pArrayOfAnsiChar = ^TArrayOfAnsiChar;
var
msg: ppAnsiChar;
ergebnis,i: integer;
pmsg : pArrayOfAnsiChar;
msgLength: pWord;
str : string;
begin
new(msg);
new(pmsg);
new(msgLength);
ergebnis := readLogMessage(msg,msgLength);
memo1.lines.add(inttostr(msgLength^));
pmsg := pointer(msg);
str := '';
for i := 0 to msgLength^-1 do
begin
str := str + pmsg^[i];
end;
ShowMessage(str);
end;
msgLength^ gibt 305 zurück, was laut Hersteller der
dll wohl realistisch sein soll. str hat folgenden Inhalt:
'0‚'#1'-'#2#1#2#6#9#4#0#$7F#0#7#3#7#1#1'€'#$10'StartTransa ction'#$0081#$14'a'#0's'#0'i'#0'g'#0'n'#0't'#0's'# 0'e'#0'_'#0'd'#0'‚YB'#0'e'#0'l'#0'e'#0'g'#0'^'#0'7 '#0'5'#0'.'#0'3'#0'3'#0'_'#0'7'#0'.'#0'9'#0'9'#0'_ '#0'0'#0'.'#0'0'#0'0'#0'_'#0'0'#0'.'#0'0'#0'0'#0'_ '#0'0'#0'.'#0'0'#0'0'#0'^'#0'1'#0'0'#0'.'#0'0'#0'0 '#0':'#0'B'#0'a'#0'r'#0'_'#0'5'#0'.'#0'0ƒ'#$E'K'#0 'a'#0's'#0's'#0'e'#0'n'#0'b'#0'…'#1' '#4' ÎŒ6,qPò³'#$19'Y½ZDHâo'#$13'ŠÍçBNhéh‹m¼Öœ™\0'#$A#6# 8'*†HÎ='#4#3#2#2#1'!'#$17#$D'190914143703Z'#4'G0E' #2'!'#0#$008F'øA$™I'#$0081')Ó–8'#$1D'šáÉ”¯oEÛâYEÛÓ 9#B[/ŒN'#2' *~§ƒs#'#5'(Øp\¬¢ívO'#$14'¥@ÉtÚÉÄFËMH_u¨¬'
Teilweise sieht es wie nullterminierte Strings aus.
Jemand eine Idee wie es richtig funktioniert?