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;
        
    }

 

posted @ 2023-10-29 10:35  lobtao  阅读(88)  评论(0)    收藏  举报