Выполнить функцию C++ из приложения C#

У меня есть DLL, написанная на C++, которая является оболочкой для C# вокруг библиотеки LZO. Но для целей тестирования я хочу знать, могу ли я преобразовать типы, поэтому я создал тестовую функцию, которая принимает содержимое и размер файла и записывает его копию.

extern "C" 
{
     __declspec(dllexport) void WriteFile(lzo_uint8 * source, int size)
    {
        FILE * fileToWrite;
       fileToWrite = fopen("test.eix", "wb+");
       if (fileToWrite)
       {
          fwrite(source, 1, size, fileToWrite);
       }
       fclose(fileToWrite);
       free(source);
    }
  }

Вот изображение кода для лучшей читаемости: http://i.epvpimg.com/u4mgh.png

Затем я импортирую это так:

[DllImport(@"GLZO.dll")]
public static extern void WriteFile(byte[] source, int size);

И назовите это так:

        byte[] g = ReadFile("raw/roota.eix");
        WriteFile(g, g.Length);

Проблема не в функции ReadFile, я проверял это. Я создал копию из другого файла и проверил обе контрольные суммы.

Итак, мой вопрос: как мне преобразовать байт [] в lzo_uint8* (без знака char*)?

1 ответ

Решение

Понял! Мне просто нужно было упорядочить его в IntPtr, без знака char * = IntPtr в C#.

Кроме того, чтобы избежать исключений, касающихся "неэквивалентных" типов, вам нужно импортировать dll следующим образом:

        [DllImport(@"GLZO.dll", CallingConvention = CallingConvention.Cdecl)]
Другие вопросы по тегам