C# Marshalling char** and unsigned char**

一曲冷凌霜 提交于 2019-12-07 09:11:42

问题


Here is the problem - i have some C image processing library that i need to use from C# application. Lack of experience with DllImport strikes me hard for now.

The function i need to use looks like:


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

So, it accepts raw image data, xml containing parameters and image width'height and then return processed image and some xml report.

For now im trying to approach it like this:

 [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);

but without any success.

Any suggestions how should it be done?

Edit: still no luck (( done it by messy C++ CLI for now


回答1:


For the output parameters, you should access the returned data using Marshal.PtrToStringAnsi.

Since the original memory was allocated within the unmanaged API, it's still your responsibility to free it as appropriate.

I also think that you should use String on both the first two parameters, not sure why the first one is an IntPtr?




回答2:


Try this

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


来源:https://stackoverflow.com/questions/4008669/c-sharp-marshalling-char-and-unsigned-char

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!