Zum Inhalt springen

nothrow für afx-Messages, aber wie?


Crush

Empfohlene Beiträge

Ich versuche gerade eine AFX-Message, die mir ständig unnötige Exceptions wirft - ist bestimmt kein Fehler drin, ehrlich! - zu übergehen, indem ich sie als nothrow deklariere. Mach ich etwas falsch?

Ich hab schon Verschiedenes probiert, aber alle Exceptions werden normal ausgelöst.


	afx_msg void __declspec(nothrow) OnBnClickedmovealias();

	afx_msg void OnBnClickedmovealias() throw();

	void __declspec(nothrow) Editor::OnBnClickedmovealias()

 	void Editor::OnBnClickedmovealias() throw()

Klappt aber alles irgendwie nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

__declspec(nothrow) ist ein Hinweis für den Compiler, dass diese Methode keine Exceptions wirft. Dadurch kann er sich einiges an Code sparen, der sonst für die Überwachung der Lebenszeit bestimmter Objekte benötigt würde. Exceptions unterdrücken kannst Du damit nicht.

Bezüglich throw() in der Deklaration:

Note Microsoft C++ does not support exception-specifications, as described in section 15.4 of the ANSI C++ draft. In addition, it does not support function-try-block described in section 15 of the ANSI C++ draft.

Quelle: MSDN Library Oktober 2001.

Was spricht dagegen, den ganzen Code der Funktion in einen try-catch-Block einzupacken?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mach ich ja. Trotzdem wird mir immer noch nicht klar, wieso der SetWindowText zu einem Absturz unter NT & W98 führt.


void Editor::OnBnClickedmovealias() 

{

try

{

	CString name("");

	int start=0,end=0;

	m_Orgname.GetSel( start, end );

	if ( start==end || start || end ) 

	{

		m_Orgname.GetWindowText( name );

		if (start<end )	name=name.Mid( start, end-start );

	}

	m_SNRAlias.SetWindowText( name );

	m_Orgname.SetSel( m_Orgname.LineLength(), m_Orgname.LineLength());

}

catch (...) { MessageBox( "Fehler aufgetreten in Editor::OnBnClickedmovealias!" );

}

Interessant ist diese Meldung, wenn ich gewaltsam die Exception auslöse:

"Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

Den ESP retten bringt aber auch nichts: Immer noch unsinnige Abstürze.

Ist nur die Frage, welche Calling-Convention von welcher Funktion. Ist doch eine AFX-Message. Also habe ich da persönlich keinen Einfluß drauf.

Schon seltsam, was da vor sich geht. Wenigstens läufts unter XP und 2000 korrekt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

CEdit m_SNRAlias;

eingebunden über

DDX_Control(pDX, IDC_SNRAlias, m_SNRAlias);

SetWindowText sieht so aus:

void CWnd::SetWindowText(LPCTSTR lpszString)

{

ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

if (m_pCtrlSite == NULL)

::SetWindowText(m_hWnd, lpszString);

else

m_pCtrlSite->SetWindowText(lpszString);

}

Also eigentlich nichts Weltbewegendes.

Naja, ich bemühge im Zweifelsfall noch die Microsoft-Developer-Hotline, hab ja noch 2 Fragen frei =8-)

Wäre nur etwas doof, die für sowas (scheinbar) simples aufzubrauchen.

hmmm. m_pCtrlSite ist 0!

Sollte aber auch nix Schlimmes sein, ist ja nur für OLE-Variablen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...