Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, B_A_D, Вы писали:
_NN>Неясно зачем такой сложный тип.
Библиотека сторонняя *.bpl, собрана то ли на с++ Builder или на Delfy.
_NN>Ссылка на указатель на массив.
_NN>У меня ваш код собирается и работает.
_NN>Пропущен у вас в коде: [return: MarshalAs(UnmanagedType.U1)]
Да, спасибо, дело было в неправильном маршаллинге BOOL.
_NN>Без этого маршаллер думает, что там тип BOOL, который будет 4 байта вместо одного.
_NN>
_NN>#include <windows.h>
_NN>#include <combaseapi.h>
_NN>#include <cwchar>
_NN>typedef BSTR TStringArray[100];
_NN>typedef TStringArray* PStringArray;
_NN>typedef float TValueArray[100];
_NN>typedef TValueArray* PValueArray;
_NN>extern "C" __declspec(dllexport) bool __stdcall FGetData(BSTR JN, int& V, PStringArray& JS, PValueArray& JV, BSTR& ErrMsg)
_NN>{
_NN> wprintf(L"%s\n", JN);
_NN> V = 10;
_NN> (*JS)[0] = SysAllocString(L"1010");
_NN> (*JV)[0] = 10.10f;
_NN> ErrMsg = SysAllocString(L"Err");
_NN> return true;
_NN>}
_NN>
_NN>_NN>using System;
_NN>using System.Runtime.InteropServices;
_NN>namespace ConsoleApp30
_NN>{
_NN> class Program
_NN> {
_NN> [DllImport("Dll1", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
_NN> [return: MarshalAs(UnmanagedType.U1)]
_NN> public static extern bool FGetData(
_NN> [MarshalAs(UnmanagedType.BStr)] string JN,
_NN> ref int V,
_NN> [In, Out, MarshalAs(UnmanagedType.LPArray, SizeConst = 100, ArraySubType = UnmanagedType.BStr)] ref string[] JS,
_NN> [In, Out, MarshalAs(UnmanagedType.LPArray, SizeConst = 100, ArraySubType = UnmanagedType.R4)] ref float[] JV,
_NN> [MarshalAs(UnmanagedType.BStr)] ref string ErrMsg);
_NN> static void Main(string[] args)
_NN> {
_NN> int v = 0;
_NN> string[] js = new string[100];
_NN> float[] jv = new float[100];
_NN> string errmsg = null;
_NN> FGetData("abc", ref v, ref js, ref jv, ref errmsg);
_NN> Console.WriteLine(v);
_NN> Console.WriteLine(js[0]);
_NN> Console.WriteLine(jv[1]);
_NN> Console.WriteLine(errmsg);
_NN> }
_NN> }
_NN>}
_NN>
_NN>_NN>abc
_NN>10
_NN>1010
_NN>0
_NN>Err
_NN>