C# маршалинг char** и unsigned char**



Вот в чем проблема - у меня есть некоторая библиотека обработки изображений 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 на данный момент

473   2  

2 ответов:

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

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

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

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

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

Comments

    Ничего не найдено.