C#编组char **和unsigned char **

时间:2010-10-24 14:30:48

标签: c# marshalling dllimport

这是问题 - 我需要在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 个答案:

答案 0 :(得分:3)

对于输出参数,您应该使用Marshal.PtrToStringAnsi访问返回的数据。

由于原始内存是在非托管API中分配的,因此您仍有责任在适当的时候释放它。

我还认为你应该对前两个参数使用String,不确定为什么第一个参数是IntPtr

答案 1 :(得分:0)

试试这个

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