f的功能
TCHAR* __stdcall W1251ToUtf8(CHAR* str)//функция пребразования строки из Windows-1251 в Unicode
{
int wsize = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
TCHAR* result = new TCHAR[wsize*sizeof(TCHAR)];
MultiByteToWideChar(CP_UTF8, 0, str, -1, result, wsize);
return result;
}
c#project中的函数声明
[DllImport("D://EncodingStringData.dll", EntryPoint = "W1251ToUtf8")]
static extern string W1251ToUtf8(string str);
函数调用
string TextForEncoding = ReadFromFile();
string OutText = W1251ToUtf8(TextForEncoding);
第一次应用程序崩溃没有任何理由,然后我添加try catch
try
{
string TextForEncoding = ReadFromFile();
string OutText = W1251ToUtf8(TextForEncoding);
}
catch (Win32Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
我抓住了accessviolationexception,现在没有理由崩溃了。
所以没有人不需要我做什么?
答案 0 :(得分:0)
一些问题:
RequestException in CurlFactory.php line 187:
cURL error 56: Recv failure: Connection timed out (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
导致返回的指针被传递string
以进行解除分配。 退出代码是STATUS_HEAP_CORRUPTION,表明最终的子弹是当前问题。通过返回CoTaskMemFree
并使用IntPtr
转换为文本来解决此问题。并且还导出deallocator。或者分配共享堆。或者返回COM Marshal.PtrToStringUni
。确实使用任何正确的方法来返回字符串。
解决了这个问题,你也需要修复其他问题。
您不会使用BStr
的原因超出了我的范围。