Это сигнатура нативного метода c:
bool nativeMethod1
(unsigned char *arrayIn,
unsigned int arrayInSize,
unsigned char *arrayOut,
unsigned int *arrayOutSize);
Я понятия не имею, почему arrayOutSize - это указатель на unsigned int, а не на сам int.
Вот как я вызываю его из C #:
byte[] arrayIn= Encoding.UTF8.GetBytes(source);
uint arrayInSize = (uint)arrayIn.Length;
byte[] arrayOut = new byte[100];
uint[] arrayOutSize = new uint[1];
arrayOutSize[0] = (uint)arrayOut.Length;
fixed (byte* ptrIn = arrayIn, ptrOut = arrayOut)
{
if (nativeMethod1(ptrIn, arrayInSize, ptrOut, arrayOutSize))
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
}
и некоторый DllImport
код
[DllImport(@"IcaCert.dll", EntryPoint = "CreateCert2", CallingConvention = CallingConvention.Cdecl)]<br>
public unsafe static extern bool CreateCert2WithArrays(
byte* data, uint dataSize,<br>
byte* result, uint[] resultSize);
Согласно документации, нативный метод должен вернуть arrayOut выполняетсясо значениями, зависящими от arrayIn.Если его размер меньше необходимого, возвращается false.Верно иначе.Я понял, что в arrayOut нужно 850 элементов.Итак, когда я создаю новый массив byte [100], функция должна возвращать false, но всегда возвращает true.Почему?