[問題] 呼叫C++DLL時 傳string出現記憶體問題

作者: lwuanma (ya)   2017-02-15 17:36:48
大家好
我在C++ DLL中寫了一個
void ABCDE(string A, string B, string C, int D, int E){ cout<< A;}
在C#調用建置通過,執行時卻出現下列訊息
"未處理的例外狀況: System.AccessViolationException: 嘗試讀取或寫入受保護的記憶
體。這通常表示其他記憶體已損毀。
於 std.basic_streambuf<char,std::char_traits<char>
>.sputn(basic_streambuf<char\,std::char_traits<char> >* , SByte* , Int64 )
於 std.operator<<<char,struct std::char_traits<char>,class
std::allocator<char> >(basic_ostream<char\,std::char_traits<char> >* _Ostr,
basic_string<char\,std::char_traits<char>\,std::allocator<char> >* _Str) 於
c:\program files (x86)\microsoft visual studio 12.0\vc\include\string: 行 196

請問這是甚麼原因?是不能傳string嗎?
另外我如果要用到C++ opencv中的copyto,resize 函數,想轉換成C#
會比較建議使用EmguCV還是包成DLL呢?
不好意思麻煩大家有想法的人回答一下了 不勝感激
作者: yeo1987 (Archie)   2017-02-15 21:35:00
你可以查查std::string跟.NET string的差別可用char*, wchar*, byte*, BSTR, SAFEARRAY等方式傳遞

Links booklink

Contact Us: admin [ a t ] ucptt.com