从dll函数返回字符串数组

时间:2015-04-09 11:57:38

标签: c++ delphi delphi-7

如何从C ++ dll返回字符串数组,然后该函数将由Delphi应用程序调用。

我试过了:

C ++ dll

#include <windows.h>
#include <vector>
#include <string>

using namespace std;

extern "C"
{
    __declspec( dllexport ) void arrayStr(vector<string> s)
    {

        s.push_back("111");
        s.push_back("222");
        s.push_back("333");
    }

}

的Delphi

procedure arrayStr(StrMem : TStringList); cdecl; external 'arrayStr.dll';
...
var
  StrMem : TStringList;
  i : integer;
begin
  StrMem := TStringList.Create;
  arrayStr(StrMem);
  for i := 0 to StrMem.Count-1 do
  begin
    ShowMessage(StrMem[i]);
  end;
  StrMem.Free;
end;

1 个答案:

答案 0 :(得分:1)

TStringList(Delphi)与C ++ STL容器不兼容。

您应该执行以下操作:

C / C ++方面:

void __stdcall Func(char **strings, int count);

德尔福方面:

type PPAnsiChar = ^PAnsiChar;
procedure Func(ArrayOfStrings: PPAnsiChar; CountOfArray: Integer); stdcall;