小编The*_*tar的帖子

从 Delphi DLL 传递 PChar

我如何从 DLL 传递 pchar?dll 必须与其他应用程序兼容,而不仅仅是 delphi。在帮助中写道,将指针传递给局部变量是危险的,如果我们将此变量设为全局变量,则代码将不是线程安全的。

我们可以安全地传递一个宽字符串,但在这种情况下,dll 将与其他(非 Delphi)应用程序不兼容。

{code in dll}
       function Test:pchar;
        var
          str:string;
        begin
           str:='Some string';
           result:=pchar(str); // wrong way, may be UB. 
        end;


        {code in dll}

        var
          str:string // global variable

        function Test:pchar;
        begin
          str:='Some string';
          result:=pchar(str); // code not threadsafe
        end;

        {code in dll}
        function Test:WideString;
        var
          str:WideString;
        begin
           str:='Some string';
           result:=str; // will works ONLY with Delphi apps :( 
        end;

:(

how do experienced programmers?



var
  Form1: TForm1;
  function Test(out p:pchar):Integer;stdcall; external 'project2';
  procedure …
Run Code Online (Sandbox Code Playgroud)

delphi dll pchar

2
推荐指数
1
解决办法
2507
查看次数

标签 统计

delphi ×1

dll ×1

pchar ×1