Я создал 2 программы - на C # и C ++, обе они вызывают нативные методы из C dll. C ++ работает нормально, потому что есть те же типы данных, C # не работает.
А собственный параметр функции равен unsigned char*
. Я попытался byte[]
в C #, это не сработало, затем я попытался:
fixed(byte* ptr = byte_array) {
native_function(ptr, (uint)byte_array.Length);
}
Это также не работает. Правильно ли конвертировать байтовый массив в byte*
таким образом? Правильно ли использовать байт в C # как unsigned char
в C ?
EDIT:
Этот материал возвращает неправильный результат:
byte[] byte_array = Encoding.UTF8.GetBytes(source_string);
nativeMethod(byte_array, (uint)byte_array.Length);
Этот материал также возвращает неправильный результат:
byte* ptr;
ptr = (byte*)Marshal.AllocHGlobal((int)byte_array.Length);
Marshal.Copy(byte_array, 0, (IntPtr)ptr, byte_array.Length);