Ich habe die folgende Funktion in meiner Anwendung:Warum bekomme ich Fragezeichen, wenn ich einen PChar auf die Konsole drucke?
function GetDeviceChannelInfo_HSI(PortNumber, Address, ChNumber: Integer;
var State: Integer): PChar; stdcall; external DLL_FILENEAME;
Alles, was ich tun möchte, ist das Ergebnis dieser an die Konsole drucken. Was passiert, ist, dass, wenn ich eine WriteLn
darauf anrufe, alles, was ich bekomme, ???????????
als Antwort ist.
Ich gehe davon aus, dass die Konsole nicht weiß, wie das zu drucken ist. Vielleicht ist es Unicode oder etwas und es kann nicht gedruckt werden?
Ich bin neu in Delphi, und habe wirklich keine Ahnung, warum das sein könnte. Tue ich tatsächlich die Zeigeradresse? Ich weiß es wirklich nicht. Jede Hilfe wäre willkommen.
Sind Sie sicher, dass die Funktionsdeklaration korrekt ist? Die meisten DLL-Aufrufe bitten Sie, einen Puffer anzugeben, den sie füllen; Sie ordnen den Puffer zu, übergeben ihn, und bei der Rückgabe wird der Puffer mit den DLL-Informationen gefüllt. Die Rückgabe eines PChar ist sehr ungewöhnlich, da die DLL den Speicher zuweist und den Zeiger an die aufrufende Anwendung zurückgibt, die keine Möglichkeit hat, sie freizugeben (außer sie sind beide in Delphi/C++ Builder kompiliert und verwenden 'ShareMem')). Woher hast du die Erklärung, die du benutzt? –
Ändern Sie den PChar zu PAnsiChar, und das Problem verschwindet. Ist das nicht ein Duplikat, von etwa 30 anderen Fragen von Leuten, die die Ansi nicht zu Unicode-Delphi-Typen gegratet haben ('PChar' bedeutete' PAnsiChar', und jetzt bedeutet es 'PWideChar') –