2010-10-24 93 views
4

這裏是問題 - 我有一些C圖像處理庫,我需要從C#應用程序使用。缺乏DllImport的經驗現在讓我很難受。C#編組字符**和無符號字符**

我需要使用的功能是這樣的:


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

所以,它接受原始圖像數據,包含XML參數和圖像width'height,然後返回處理後的圖像和一些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完成它現在

+0

你能提供「沒有成功」更多的細節? – Dialecticus 2010-10-24 15:06:52

+0

哦,它編譯並運行,但遇到訪問衝突,所以有些事情是錯誤的。我已經仔細檢查了輸入xml,所以我認爲問題出在 – ALOR 2010-10-24 15:16:45

回答

3

對於輸出參數,你應該使用Marshal.PtrToStringAnsi訪問返回的數據

由於原來的內存被分配的。非託管API,它仍然是你的責任,以釋放它適當的。

我也認爲你應該對前兩個參數都使用String,不知道爲什麼第一個是IntPtr

+0

因爲我通過System.Drawing.Bitmap.GetHBitamp()立即得到一個IntPtr; – ALOR 2010-10-24 19:35:39

+0

@ALOR - 我明白了,這不是一個C字符串,然後你就對了。那是'Bitmap'而不是'Bitamp'我認爲? – 2010-10-24 20:09:03

+0

Yeap,sry拼寫錯誤 – ALOR 2010-10-24 22:21:28

0

試試這個

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

好的,但我應該如何'將字節[]轉換爲字符串,反之亦然? – ALOR 2010-10-28 15:15:30

+0

好的意味着它的工作(如在 - 不崩潰)?你指的是什麼字節[]?你發佈的簽名只有char數組/指針 – 2010-10-28 15:44:34