Есть DLL-ка, написанная на С++ Builder.
Из нее экспортируется функция и при вызове из С++ аппликации все работает
typedef BSTR TStringArray[100];
typedef TStringArray *PStringArray;
typedef Single TValueArray[100];
typedef TValueArray *PValueArray;
typedef __stdcall bool GetData(BSTR JN, int &V, PStringArray &JS, PValueArray &JV, BSTR &ErrMsg);
//вызов
int V;
PStringArray JS;
PValueArray JV;
BSTR JN =SysAllocString(L"ABCD");
GetData( JN, V, JS, ОV, ErrMsg);
задача вызвать то же самое из C#, модуль загружается динамически, указатель на функцию получен нормально
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate bool FGetData(string JN, ref int V,
[In,Out, MarshalAs(UnmanagedType.LPArray, SizeConst = 100,ArraySubType = UnmanagedType.BStr)] ref string[] JS,
[In, Out, MarshalAs(UnmanagedType.LPArray, SizeConst=100, ArraySubType = UnmanagedType.R4)] ref float[] JV,
[ MarshalAs(UnmanagedType.BStr)] ref string ErrMsg);
//вызов
string JN = "AA000110";
string ErrMsg = "";
int Ver = 0;
string[] JS = new string[100];
float[] JN = new float[100];
GetData(JN, ref V, ref JS, ref JV, ref ErrMsg);
валится при вызове из C# с ошибкой "AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Доступа к исходникам DLL-ки нет.
В чем ошибка ?