Вызов Delphi DLL-функции из C # Вопрос о распределении типов данных (массив char / массив целых чисел) - PullRequest
0 голосов
/ 20 мая 2019

Вызов функции Delphi DLL из C # Marshalling типа данных (массив символов / массив целых чисел)

Функция delphi

type
 _InputPW = array[0..39] of char;
 _InputPW_Len = array[0..1] of integer;

 _OutPW = array[0..64] of char;
 _OutPW_Len = array[0..1] of integer;

 function call_encrypt_pw(Const m_InputPW : _InputPW;
                          Const m_InputPW_Len : _InputPW_Len;
                          Const m_ResultPW : _OutPW;
                          Const m_ResultPW_Len : _OutPW_Len
                          ):integer;stdcall;
                          external 'Ext.dll' name 'call_encrypt_pw';

Код C #

[DllImport(@"Ext.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.I4)]
public static extern int call_encrypt_pw(
[MarshalAs(UnmanagedType.LPStr, SizeConst = 40)] string input, [MarshalAs(UnmanagedType.LPArray, SizeConst = 2)] int[] input_len, [MarshalAs(UnmanagedType.LPStr, SizeConst = 65)] out string output, [MarshalAs(UnmanagedType.LPArray, SizeConst = 2)] out int[] output_len
);

output / output_len null return.

Я думаю, что это проблема Маршаллинга.

Пожалуйста, посоветуйте мне, как изменить код.

...