私はMFCダイアログベースのアプリケーションを実行しています。私は(私は窓に通信を置くことができます)ダイアログにString ^を送信するリファレンスクラス(コードスニペットの外)で実行されているシリアル通信スレッドを持っています。問題は(コメント付きコードからわかるように)その文字列で何かをしようとするたびに(ローカル変数に代入する場合を除いて)、「DLP_Printer_Control.exeで 'System.AccessViolationException'型の未処理の例外が発生する」MFC/CLI混合モード 'System.AccessViolationException'
追加情報:保護されたメモリを読み書きしようとしました。これは、他のメモリが壊れていることを示していることがよくあります。
このスニペットでは、クラッシュするatoiです。私はAtoiを使用しています。なぜなら、各文字列要素をASCIIにコピーし、値によってメンバーCStringにコピーしようと考えていたからです。それはうまくいかなかった。すべてのコメント行は例外を生成します。私は管理されたメモリから発信されたものにアクセスしようとしていると訴えています。すべての回避策を提案しますか?このスニペットで
bool CDLP_Printer_ControlDlg::UpdateCommsWindow_right(String^ strCommsLine)
{
CString strTemp = strCommsLine;
LPWSTR charTemp;
int i = 0;
int i_len = strTemp.GetLength();
if (i_len == 0)
return false;
charTemp= strTemp.GetBuffer(i_len);
i =atoi((const char*)charTemp[0]);
strTemp.ReleaseBuffer();
//if (m_strCommsLeft.IsEmpty())
// return false;
//LPCTSTR szTemp = (LPCTSTR)strTemp;
//m_rightCommsLabel.SetWindowTextW((LPCTSTR)strTemp);
//m_rightCommsLabel.SetWindowTextW(szTemp);
//m_rightCommsLabel.SetWindowTextW(L"SUCCESS");
return true;
}
多くのおかげです。_ttoi()はそのエラーを止めましたが、これは赤いニシンであることが判明しました。実際には、私はメンバintを持っている場合、私はこのメンバintに設定し、私は "例外がスローされる: 'System.NullReferenceException'"私はそれを行う瞬間;( –
'私はメンバint [...] 'それはNULLオブジェクトポインタを介してメンバ関数を呼び出した場合に起こりますが、MCVEなしでは推測することは不可能です。 – dxiv