Итак, я пытаюсь вызвать функцию, которая есть в моей неуправляемой DLL C ++.
void foo(char* in_file, char * out_file)
В моем приложении на C # я объявляю ту же функцию, что и
[DllImport("dll.dll")]
public static extern void foo(byte[] in_file, byte[] out_file);
Фактические параметры, которые я передаю через ASCII-кодировщик, вот так
byte[] param1 = Encoding.ASCII.GetBytes(filename1);
byte[] param2 = Encoding.ASCII.GetBytes(filename2);
foo(param1, param2);
Все работает, кроме случаев, когда длина param1 равна 0, или 36, или 72 символам (в байтах). Затем по какой-то причине DLL сообщает о полученной длине 1, 38, 73 с символом 0x16, добавленным в самом конце.
Я потратил полдня на попытки отладить и понять, почему это происходит. Есть идеи?
Какое значение кратно 36?
Редактировать / решение
После того, как я опубликовал это, меня поразил возможный ответ. Добавив нулевой символ 0x0 в конец моих строк перед преобразованием их в байтовые массивы, я устранил проблему. Хотя я не уверен, что так задумано.