aardio调用pascal dll 结构体
pascal dll
type TStruct = record x: integer; y: integer; z: UTF8String; end; TStructString = record pointerID: Integer; param: UTF8String; end; PStructString = ^TStructString; function test(str: PChar): PChar; stdcall; function mytest(str: PStructString): PStructString; stdcall; procedure destroymem(str: Integer); stdcall; function test(str: PChar): PChar; stdcall; var s1: string; begin s1 := Utf8ToAnsi(StrPas(str)) + '哈哈'; Result := PChar(AnsiToUtf8(s1)); end; function mytest(str: PStructString): PStructString; stdcall; var s1: string; p1: PStructString; begin s1 := Utf8ToAnsi(str.param); New(p1); p1.pointerID := Integer(p1); p1.param := ansitoutf8(s1 + '深圳 result'); Result := p1; end; procedure destroymem(str: Integer); stdcall; begin Dispose(PStructString(str)); end;
aardio 里默认字符串是utf8编码
mytest = delphiDll.api("mytest", "struct(struct)", "stdcall");
destroymem = delphiDll.api("destroymem", "void(int)", "stdcall");
for (i = 1; 1000000; 1) {
var stringStruct = {
int pointerID;
string param;
}
stringStruct.param = 'hello 深圳'+i;
var stringStructResult = {
int pointerID;
string param;
}
var result = mytest(stringStruct);
raw.convert(result, stringStructResult);
console.dump(stringStructResult)
console.log(tonumber(result))
// 谁创建谁释放内存, delphi创建delphi释放内存
destroymem(tonumber(result));
stringStructResult = null;
stringStruct = null;
}

浙公网安备 33010602011771号