Ich führe eine MFC-Dialog-basierte Anwendung. Ich habe einen seriell-comms-Thread, der in einer Referenzklasse läuft (außerhalb des Code-Snippets), der einen String^an den Dialog sendet (damit ich die comms in ein Fenster setzen kann). Das Problem ist (wie Sie aus kommentiertem Code sehen), dass jedes Mal, wenn ich versuche, irgendetwas mit dieser Zeichenkette zu tun (außer einer lokalen Variablen zuzuweisen), bekomme ich "Eine nicht behandelte Ausnahme des Typs 'System.AccessViolationException' in DLP_Printer_Control.exeMFC/CLI gemischten Modus 'System.AccessViolationException'
Zusätzliche Informationen: Es wurde versucht, geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist. "
In diesem Snippet stürzt das Atoi ab. Ich verwende atoi, weil ich die Idee hatte, jedes Zeichenfolgenelement in ASCII zu kopieren und dann nach Wert in einen Mitglieds-CString zu kopieren. Das hat nicht funktioniert. Jede kommentierte Zeile erzeugt eine Ausnahme. Ich versuche es mit dem Versuch, auf etwas zuzugreifen, das in gemanagtem Gedächtnis entstanden ist. Wurden Workarounds vorgeschlagen?
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;
}
Vielen Dank.Der _ttoi() stoppte diesen Fehler, aber es stellte sich heraus, dass es ein Ablenkungsmanöver war. Eigentlich, wenn ich ein Mitglied int habe, dann setze ich I auf dieses Mitglied int, bekomme ich "Exception geworfen: 'System.NullReferenceException'" in dem Moment, wenn ich es mache; ( –
'wenn ich ein Mitglied Int haben [...] 'Das würde passieren, wenn Sie die Member-Funktion über einen NULL-Objektzeiger aufrufen würden, aber es ist unmöglich, ohne MCVE zu raten. – dxiv