請按照本教程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 –