das Program stürzt bei Aufruf von .DoModal() aus eigener DLL

Reticent

Erfahrenes Mitglied
Guten Tag Alle zusammen!

ich bastle an eigener DLL. Vorerst möchte ich einfach in meiner DLL ein Dialogfenster zum erscheinen bringen. Ich habe eine Standartdll, wo ich das dazu getippt habe:
Code:
...
MiniKameraDialog* MKamDialog = new MiniKameraDialog();
void RecognizeString(BOOL showDialog, CString* str)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	if(showDialog == TRUE)
	{
		MKamDialog->DoModal();
	}
}
das MiniKameraDialog existiert, aber wenn ich in meiner TestDLL-Anwendung die Funktion "RecognizeString" aufrufe stürtzt mein Program ab, sobald DoModal aufgerufen wird.
ich rufe die DLL-Funktion so auf:
Code:
typedef void (* DLLFUNCTION2PROC)(BOOL bFlag, CString* resultString);
BOOL CTestDLLDlg::OnInitDialog()
{
...
	DLLFUNCTION2PROC TakeRecognizedString = NULL;
...
	HMODULE hLandQartDLL = LoadLibrary("MiniKameraDLL.dll");
...
	TakeRecognizedString = (DLLFUNCTION2PROC)GetProcAddresshLandQartDLL,"RecognizeString");
...
	(TakeRecognizedString)(1, &strRecognizedText);
...
}
Woran kann es liegen? Bin für jeden Tipp dankbar.
 
Du erzeugst 'MKamDialog' außerhalb einer Funktion mit 'new'. Das ist so viel ich weiß nicht zulässig. Muß das denn ein Zeiger sein?
Es sollte entweder so
Code:
MiniKameraDialog MKamDialog;
    void RecognizeString(BOOL showDialog, CString* str)
   {
   	AFX_MANAGE_STATE(AfxGetStaticModuleState());
   	if(showDialog == TRUE)
   	{
   		MKamDialog.DoModal();
   	}
   }
oder so gehen:
Code:
void RecognizeString(BOOL showDialog, CString* str)
  {
  	MiniKameraDialog* MKamDialog = new MiniKameraDialog();
  	AFX_MANAGE_STATE(AfxGetStaticModuleState());
  	if(showDialog == TRUE)
  	{
  		MKamDialog->DoModal();
  	}
  }
 
das stimmt. Danke!
...
habe ausprobiert und kein gutes Ergebniss bekommen.
Unhandled exception at 0x00f4b61d (MiniKameraDLL.dll) in TestDLL.exe: 0xC0000005: Access violation reading location 0x00000000.
es kommt jetzt sobald
Code:
MKamDialog.DoModal();
aufgeruffen wird.
das merkwürdigste ist, dass es das gleiche passiert wenn ich mit oder ohne new und Poitern arbeite. Ich habe beide Vorschläge ausprobiert und es funktionniert net :(((( :(
:confused:
 
HAlleluja

habe gelöst. Der Dumme .NET hat die neue Klasse für mein MiniKameraDialog angelegt und im OnInitDialog das
Code:
CDHtmlDialog::OnInitDialog();
angelegt. ich habe jetzt auf
Code:
CDialog::OnInitDialog();
geändert und es geht.
:-)
 
Zurück