我無法弄清楚如何將char *傳遞給C#中的C++函數。調用一個C#函數,它需要從C#中的字符指針#
extern "C" __declspec(dllexport)
unsigned int extractSegment(char * startPoint, unsigned int sizeToExtract)
{
//do stuff
shared_ptr<std::vector<char>> content(new std::vector<char>(startPoint,startPoint+sizeToExtract));
//do more stuff
return content->size();
}
該函數用於從文件中讀取段並對其執行一些二進制操作(爲什麼使用字符向量)。 startPoint是我想要讀取的段的開始。我無法改變這個功能。
在C#中,我嘗試將文件讀入一個byte []數組,並定義了使用StringBuilder的DllImport,其中導出具有char *。我試圖這樣稱呼它:
byte[] arr = File.ReadAllBytes(filename);
StringBuilder sb = new StringBuilder(System.Text.Encoding.Unicode.GetString(arr, startPoint,arr.Length - startPoiunt));
extractSegment(sb,200);
這導致了SEHException。
你可能忘記了CallingConvention.Cdecl – 2014-11-05 11:07:56