我有一个使用 BTMemoryModule 并从 DLL 导入/调用函数的 delphi 应用程序。DLL 是用 C/C++ 编写的。
delphi 应用程序将原始 pwidechar(4 字节数组或宽字符数组)发送到函数。
我没有 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 var 的原始指针。delphiapp 中的过程保持活动状态(直到 dll ExportedFunc 完成)。因此,MyString var 在过程结束后不会被释放。我现在的问题是:是否可以在 DLL 中更改 MyString 的值?(技术上可能......)但是如何?该字符串以空结尾,因此用户知道指针长度有多长。但是如果 C++ DLL 改变了值,用户是不是也分配了新的空间什么的?或者这会自动发生吗?
谢谢你的帮助。