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 на данный момент
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