请按照本教程here但没有成功。返回内存地址错误。在C#中返回字符串数组并获取delphi [Interop]
我想这样的,不是我的内存错误,但返回空值
代码德尔福:
interface
procedure getValores(samples: array of string); stdcall; external 'myDll.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
vet :array[0..400] of string;
begin
getValues(vet);
Layout('',vet);
end;
end.
C#
[DllExport(CallingConvention = CallingConvention.Cdecl)]
public static void getValores(
[Out]
[MarshalAs(UnmanagedType.LPArray,
ArraySubType=UnmanagedType.LPWStr, SizeConst=400)]
String[] test
)
{
if (test == null)
{
MessageBox.Show("null");
return;
}
MessageBox.Show("Recive" + test.Length);
for(int i = 0; i < test.Length; i++)
test[i] = "test";
return;
}
别人的代码已经通过该走了问题?
谢谢
很多方法。此代码无法工作。德尔福的阵列和字符串不是国际刑警组织的安全。如果你的代码是纯粹的Delphi,那么你的代码甚至不会工作,因为你按值传递数组。例如,您可以将列表编码为JASON。或者你可以一次返回一个字符串。 –
或者您可以简单地在您建议的问题上做出答案。很明显,为什么你没有遵从那里的建议,并且制定出自己的代码超出了我的想象。 –
一次返回一个字符串是一个好主意。我明天会考。 Tks –