Я очень плохо знаком с C # (только начал учиться на прошлой неделе).
У меня есть пользовательская DLL, написанная на C со следующей функцией:
DLLIMPORT void test_function (double **test)
Я хочу получить указатель из C # для массива 'test'.
Итак, если в функции DLL у меня есть test [0] = 450.60, test [1] = 512.99 и т. Д., Я хочу, чтобы это было доступно в моей программе на C #.
В программе на C # у меня есть нечто похожее на:
namespace TestUtil
{
public class Echo
{
public double[] results = new double[10];
public double[] results_cpy = new double[10];
[DllImport("test_dll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern unsafe void test_function(ref double[] Result);
public unsafe void Tell()
{
results[0] = 0.0;
results[1] = 0.0;
results_cpy[0] = 0.0;
results_cpy[1] = 0.0;
test_function(ref results);
results_cpy[0] = (double)results[0] + (double)results[1] ;
}
}
}
В функции DLL «test_function» я использовал следующее:
*test[0] = 450.60;
*test[1] = 512.99;
Внутри DLL все было в порядке (я использовал окно сообщения внутри DLL, чтобы проверить, применяются ли значения). Вернувшись в программу на C #, «results [0]» выглядит нормально, и я могу получить из нее значения, но «results [1]» дает мне ошибку индекса за пределами границ. Я знаю это, потому что если я опущу '+ (double) results [1]', я не получу ошибку. Кроме того, если я не попытаюсь изменить DLL в test [1], она сохранит исходное значение из C # (в моем примере 0.0).
Очевидно, я не делаю что-то правильно, но это самое близкое, что я смог сделать, чтобы это сработало вообще. Все остальное, что я пробовал, с треском проваливается.
Любая помощь будет принята с благодарностью.