BTMemoryModule を使用し、DLL から関数をインポート/呼び出す Delphi アプリケーションがあります。DLL は C/C++ で書かれています。
Delphi アプリケーションは、元の pwidechar (4 バイトの配列または widechar の配列) を関数に送信します。
C/C++ 疑似コードはありませんが、次のようになります。
type
TMyFunc = function ( p : pointer ): pointer; stdcall;
procedure anynamehere();
var
Addr : TMyFunc;
MyString : WideString;
begin
[...]
Addr := BTMemoryGetProcAddress('mydll.dll', 'ExportedFunc');
MyString := 'TEST';
[...]
ExportedFunc (pwidechar(MyString));
MessageBoxW (0, pwidechar(MyString), '', 0);
end;
DLL には、MyString 変数への元のポインターが含まれているはずです。delphiapp のプロシージャはアクティブなままです (dll ExportedFunc が終了するまで)。そのため、MyString var はプロシージャの終了後に破棄されません。私の質問は次のとおりです。DLL 内で MyString の値を変更することは可能ですか? (技術的には可能...) でもどうやって?文字列は null で終了するため、ユーザーはポインターの長さがわかります。しかし、C++ DLL が値を変更した場合、ユーザーは新しいスペースなどを割り当てませんか? それとも、これは自動的に行われますか?
ご協力いただきありがとうございます。