Dialog in der Dll
-
hi leutz,
wieder mal ein problem, ich will einen dialog in meiner dll aufrufen bekomme aber bein dlg.DoModal immer eine -1 zurück und der dialog wird auch net angezeigt hier nochmal meine 2 versuche// CConnectOra ist von der Klasse CDialog abgeleitet CConnectOra(); if(IDOK == dlg.DoModal()) { //bla bla ... } //und... CDialog dlg(IDD_CONDLG); if(IDOK == dlg.DoModal()) { //bla bla ... }
kann jemand helfen?? oder hat jemand vieleicht das gleich problem und schon gelösst.
thx im **voraus
tracer[ Dieser Beitrag wurde am 09.12.2002 um 14:35 Uhr von tracer editiert. ]
[ Dieser Beitrag wurde am 09.12.2002 um 14:36 Uhr von tracer editiert. ]**
-
Schau mal auf meine HP unter Projekte
-
hi tom,
danke nochmal, deine dll hat auch gut gefunzt, aber, ich wollte ja eigendlich wissen warum meine MFC erstellte dll nicht funktioniert, und ich bin auch auf die lösung gekommen, allerdings erst als ich dein projekt auseinandergelegt:D hab.. mir ist aufgefallen das du als einsprungspunkt DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)benutzt..in meiner MFC erstellten dll hatte ich keinen solchen einsprungspunkt...dafür war aber bei mir ein BEACHTEN SIE// Beachten Sie! // // Wird diese DLL dynamisch an die MFC-DLLs gebunden, // muss bei allen von dieser DLL exportierten Funktionen, // die MFC-Aufrufe durchführen, das Makro AFX_MANAGE_STATE // direkt am Beginn der Funktion eingefügt sein. // // Beispiel: // // extern "C" BOOL PASCAL EXPORT ExportedFunction() // { // AFX_MANAGE_STATE(AfxGetStaticModuleState()); // // Hier normaler Funktionsrumpf // } // // Es ist sehr wichtig, dass dieses Makro in jeder Funktion // vor allen MFC-Aufrufen erscheint. Dies bedeutet, dass es // als erste Anweisung innerhalb der Funktion ausgeführt werden // muss, sogar vor jeglichen Deklarationen von Objektvariablen, // da ihre Konstruktoren Aufrufe in die MFC-DLL generieren // könnten.
und das war das rätsels lösung...ich musste einfach nur das makro AFX_MANAGE_STATE(AfxGetStaticModuleState()) immer in meinem funktionsaufruf als erstes ausführen....also um auf mein porblem zu kommen:
void ConnectOracle() { //Makro Wichtig sonst nix funzen AFX_MANAGE_STATE(AfxGetStaticModuleState()); CConnectOra dlg; if(IDOK == dlg.DoModal()) { return; } }
aber danke nochmal tom.... und ich bin nun mal so,das ich nicht einfach lösungen kopiere und mir dann keine gedanken mehr mach wie es funktioniert... aber nur so find ich kann man auch lernen
cu and good coding
tracer
-
War auch von mir so gedacht, daß du dir meine Bsp. ansiehst und die Fehler dadurch in deinem Projekt suchst.
-
Unix-Tom: In deinem Quellcode kommt ja garkein AFX_MANAGE_STATE drin vor?!
Warum?
-
kleiner nachschlag
link zu einem MFC DLL TUT:
http://www.nickles.de/c/s/21-0011-213-1.htm
und davon ein ausszug text das beantwortet dir <ext> hoffentlich deine frageAFX_MANAGE_STATE(AfxGetStaticModuleState());
Hier handelt es sich um eine Besonderheit von DLLs, die die MFC verwenden. Jede Funktion in der eine MFC Klasse verwendet wird, muss als erstes Grundsätzlich das AFX_MANAGE_STATE Makro verwenden - sonst kommt MFC durcheinander und Ihr Programm stützt ab. Wie gesagt: Das ist eine Spezialität von MFC: Bei normalen DLLs ist so etwas nicht notwendig.
cu
tracer
-
ja danke tracer, das hatte ich schon kapiert das das nur bei MFC DLLs der Fall ist und man dieses Makro benutzen muss. Aber gerade deswegen frage ich mich warum es in Unix-Toms Projekt _nicht_ vorkommt, obwohl es eine MFC DLL ist.
-
hi ext,
tom seine dll ist keine reine mfc dll...er hat einen einsprungspunkt DllMain() den macht mann bei einer reinen win32 dll
cu tracer
-
MFC-DLL können auch nur von MFC-Programme verwendet werden.
Diese DLL soll auch nur ein Bsp. sein, sie funktioniert aber ist nicht perfect, da man ja selbst Coden soll wie du schon sagtest und nicht einfach abkupfern.
-
MFC-DLL können auch nur von MFC-Programme verwendet werden.
Ich würde sagen diese Aussage ist falsch.
-
<Globol>Ich würde sagen diese Aussage ist falsch.
und das ist überhaubt keine aussage
tracer
-
sorry war ein bisschen verwirrt.
cu
tracer
-
Bevor du sagst das etwas falsch ist liefere mir einen Gegenbeweis.
Es gibt 3 Arten von MFC-DLL`s
Reguläre DLL, die eine öffentliche MFC-DLL verwendet.
Reguläre DLL, die mit MFC statisch verknüft ist.
MFC-Erweiterungs-DLL (Diese kann nur von MFC-Programmen verwendet werden)
Quelle: Microsoft
-
*sorry war ein bisschen verwirrt.
cu
tracer*mann sollte beiträge unter einem andren namen lassen besonders wenns ein registrierter user ist :p
cu Tracer