Ich habe eine Methode FormatOutPut()
, die intern ruft eine "CallBack" -Methode MyFunct()
in C++. Es gibt einen Absturz, wenn die Kontrolle FormatOutPut()
herauskommt. Die Callback-Methode MyFunct()
druckt nur die Ausgabe auf dem Bildschirm. Wenn ich den Code mit windbg ausgetestet bekam ich folgende Spuren,Exe stürzt nach dem Verlassen der Methode in C++
(1250.1270): Stack buffer overflow - code c0000409 (!!! second chance !!!)
Was ich vermute ich, dass die Absenderadresse auf dem Stack für die FormatOutPut()
, durch die Callback-Methode beschädigt ist. Wenn die Steuerung zurück zur Aufrufmethode verschoben wird, stürzt sie ab.
Wenn ich die Callback-Methode auskommentieren, funktioniert alles gut. Irgendwelche Eingaben dazu werden große Hilfe sein.
Callback-Methode Prototyp ist als unten,
typedef void(__stdcall *MyCallBack)(char*,char*,char*,char*,char*,char*,char*,char*,char*,char*,int, int);
Körper: -
void MyCallbackRoutine(char* GetFeature,char* GetVersion,char* GetStartDate, char* GetExpireDate, char* GetUsers,char* GetKey,char* GetVendorString, char* GetHostID,char* GetErrorMsg,char* GetLicense,int GetCheckOutStatus, int nCount)
{
if (nCount == 0)
{
_strtime_s(timeCallbackstart, 10);
time(&startCallbackstart);
bOnlyOnce = true;
}
cout << endl;
cout << "-------------------------------------------------------" << endl;
cout << "GetCheckOutStatus: " << GetCheckOutStatus << endl;
cout << "GetErrorMsg: " << GetErrorMsg << endl;
cout << endl;
cout << "GetFeature: " << GetFeature << endl;
cout << "GetVersion: " << GetVersion << endl;
cout << "GetStartDate: " << GetStartDate << endl;
cout << "GetExpireDate: " << GetExpireDate << endl;
cout << "GetUsers: " << GetUsers << endl;
cout << "GetKey: " << GetKey << endl;
cout << "GetVendorString: " << GetVendorString << endl;
cout << "GetHostID: " << GetHostID << endl;
cout << "GetLicense: " << GetLicense << endl;
cout << endl;
cout << "Licenscounter: " << nCount << endl;
cout << "------------------------------------------------------" << endl;
cout << endl;
}
Danke und Grüße, AKJ
Ich würde es hassen, der Programmierer zu sein, der eine solche Funktion aufrufen muss. Zwölf Parameter, wobei 10 Zeichenzeiger sind. Huch. – PaulMcKenzie
Auch ich hasse: P .. Dieser Code funktionierte gut, wenn mit VS2008 Compiler auf Win7 OS kompiliert. Ich habe Probleme, wenn ich VS2013 und win10 OS verwende. – AKJ
Sie haben also einen Callback-Prototyp veröffentlicht. Welche Informationen sollen wir daraus gewinnen, außer dass es eine Menge Parameter gibt? Wie wäre es mit dem Posten, was dieser Callback anruft? Anstatt den Aufruf zu kommentieren, müssen Sie den Text der Callback-Funktion selbst auskommentieren und nur eine 'return'-Anweisung haben. Wenn der Fehler verschwindet, ist es etwas, das Sie in dieser Funktion tun, die fehlerhaft ist. Wenn der Fehler weiterhin besteht, hat dies etwas mit (mehr als wahrscheinlich) einer Nichtübereinstimmung der Aufrufkonvention oder einer Nichtübereinstimmung der Parameter zu tun. – PaulMcKenzie