C # Marshalling char ** и unsigned char ** - PullRequest
       44

C # Marshalling char ** и unsigned char **

4 голосов
/ 24 октября 2010

Вот проблема - у меня есть некоторая библиотека для обработки изображений C, которую мне нужно использовать из приложения C #.Отсутствие опыта работы с DllImport меня сейчас сильно поражает.

Функция, которую мне нужно использовать, выглядит следующим образом:


    IMAGEPROCESS_API const int importImage
        (
        const unsigned char* image,
        const char* xmlInput,
        unsigned char** resultImage,
        char** xmlOutput
        );

Итак, она принимает необработанные данные изображения, параметры, содержащие XML и ширину изображения 'высота, а затем вернуть обработанное изображение и некоторый отчет XML.

Сейчас я пытаюсь подойти к нему так:

 [DllImport("imageprocess.dll",CallingConvention = CallingConvention.StdCall,EntryPoint = "importImage",CharSet=CharSet.Ansi)]
        private static extern int ImportImageNative(IntPtr imageData, String xmlDescriptor, out IntPtr processedImage, out IntPtr xmlOut);

, но безуспешно.

Любые предложения, какэто должно быть сделано?

Редактировать: все еще не повезло ((на данный момент это сделал грязный C ++ CLI

Ответы [ 2 ]

3 голосов
/ 24 октября 2010

Для выходных параметров вы должны получить доступ к возвращенным данным, используя Marshal.PtrToStringAnsi .

Поскольку исходная память была выделена в неуправляемом API, вы по-прежнему обязаны освобождать ее соответствующим образом.

Я также думаю, что вы должны использовать String для обоих первых двух параметров, не знаю, почему первым является IntPtr?

0 голосов
/ 25 октября 2010

Попробуйте это

    [DllImport("imageprocess.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern int importImage(string imageData, string xmlDescriptor, out string processedImage, out string xmlOut);
...