error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'SQLHWND'


  • Mod

    Duchrsuche mal die Sourcen ob es nicht noch einen define zu SQLHWND gibt. Ich glaube. Der würde denn Sinn des Stamentes natürlich verbiegen.



  • Oder du hast aus irgendeinem Grund die <windows.h> erst hinter der <sqltypes.h> eingebunden - wodurch der Bezeichner HWND an dieser Stelle noch nicht bekannt ist.



  • Ich habe jetzt mit der Reihenfolge ein wenig probiert. Wenn ich ganz zum Schluss einbinde kommt die untenstehende Fehlermeldung. Mit der kann ich noch weniger anfangen

    mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 bereits in MSVCRTD.lib
    (dllmain.obj) definiert


  • Mod

    Wenn Du die MFC verwendest must Du zu allererst afxwin.h includen. Vergiss windows.h, die wird durch die MFC gezogen. danach alle anderen Include files. Vor afxwin.h solltest Du nichts anderes includen!



  • Ich habe jetzt mal in die Linker Optionen /verbose:lib reingeschrieben. Nach der Reihenfolge ist das doch schon ganz weit oben. Afxwin.h hat nichts gebracht

    Kompilierung läuft...
    ExcelImport_c.cpp
    Linker-Vorgang läuft...
    Bibliotheken werden durchsucht
        Durchsuchen von D:\ANSOFT\SIMPLORER70\TEMPLATE\C_INTERFACE\LIB\Sim2000User.lib:
        Durchsuchen von D:\ANSOFT\SIMPLORER70\TEMPLATE\C_INTERFACE\LIB\Complex.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\MSVCRT.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42.lib:
    mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 bereits in MSVCRT.lib(dllmain.obj) definiert
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\comctl32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\oledlg.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\olepro32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\urlmon.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\msvcprt.lib:
        Durchsuchen von D:\ANSOFT\SIMPLORER70\TEMPLATE\C_INTERFACE\LIB\Sim2000User.lib:
        Durchsuchen von D:\ANSOFT\SIMPLORER70\TEMPLATE\C_INTERFACE\LIB\Complex.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\MSVCRT.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\comctl32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\oledlg.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\olepro32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\urlmon.lib:
    Durchsuchen der Bibliotheken abgeschlossen
    mfcs42.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 bereits in MSVCRT.lib(dllmain.obj) definiert; zweite Definition wird ignoriert
       Bibliothek Release/ExcelImport_c.lib und Objekt Release/ExcelImport_c.exp wird erstellt
    Bibliotheken werden durchsucht
        Durchsuchen von D:\ANSOFT\SIMPLORER70\TEMPLATE\C_INTERFACE\LIB\Sim2000User.lib:
        Durchsuchen von D:\ANSOFT\SIMPLORER70\TEMPLATE\C_INTERFACE\LIB\Complex.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\MSVCRT.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\comctl32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\oledlg.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\olepro32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\urlmon.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\msvcprt.lib:
    Durchsuchen der Bibliotheken abgeschlossen
    Release/ExcelImport_c.dll : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
    Fehler beim Ausführen von link.exe.
    
    ExcelImport_c.dll - 2 Fehler, 1 Warnung(en)
    


  • Vielleicht solltest du Martin's Hinweis auch berücksichtigen - der kennt sich normalerweise recht gut mit der Materie aus 😉

    Martin Richter schrieb:

    Wenn Du die MFC verwendest must Du zu allererst afxwin.h includen. Vergiss windows.h, die wird durch die MFC gezogen. danach alle anderen Include files. Vor afxwin.h solltest Du nichts anderes includen!



  • Wo kann ich denn einstellen, das afxwin.h zuerst eingebunden wird. Gibt es da eine Option bei den Einstellungen. In die erste Reihe der Dateien schreiben bringt nichts.

    Ich bin noch relativ neu in der Materie 😕



  • Ein Header wird genau dort eingebunden, wo das zugehörige #include steht - also muß die Anweisung #include<afxwin.h> ganz oben in deine Quelldateien (am besten an allererster Stelle in der stdafx.h).



  • Hier steht Simplorerafx.h für stdafx.h. afxwin.h einfügen hat nichts gebracht.
    Wenn ich in den Optionen MFC wird nicht verwendet auswähle, kommt die Fehlermeldung, dass "nafxcw.lib" nicht geöffnet werden kann. Die ist laut meinem gegoogle erst in der Pro Version dabei.

    Auszug aus Erstellen Info

    Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\MSVCRT.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfc42.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB\mfcs42.lib:
    mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 bereits in MSVCRT.lib(dllmain.obj) definiert
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
        Durchsuchen von C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
    
    // Simplorerafx.h : include file for standard system include files,
    //  or project specific include files that are used frequently, but
    //      are changed infrequently
    //
    
    #if !defined(AFX_STDAFX_H__9889DAC8_2021_48A8_B355_B57100EB099B__INCLUDED_)
    #define AFX_STDAFX_H__9889DAC8_2021_48A8_B355_B57100EB099B__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    // Insert your headers here
    #define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
    Habe ich hinzugefügt, damit afxwin.h ganz oben steht
    */
    #include <afxwin.h>         // MFC-Kern- und -Standardkomponenten
    #include <afxext.h>         // MFC-Erweiterungen
    #include <afxdisp.h>        // MFC Automatisierungsklassen
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h>			// MFC-Unterstützung für gängige Windows-Steuerelemente
    #endif // _AFX_NO_AFXCMN_SUPPORT
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    #include <afxext.h>
    
    // TODO: reference additional headers your program requires here
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_STDAFX_H__9889DAC8_2021_48A8_B355_B57100EB099B__INCLUDED_)
    


  • Ich habe gerade telefoniert. Da hat man mir gesagt, das ich versuchen würde eine statische und eine dynamische Bibliothek einzubinden.
    Ich müsste also etwas an meinen Optionen einstellen.
    Könnt ihr damit was anfangen. Da probier ich schon die ganze Zeit.


  • Mod

    Was soll das eigentlich werden eine DLL? Eine EXE?
    MFC dynamisch/Statisch?
    Bist Du sicher, dass die Sim2000User LIB die selben Compiler Einstellungen nutzt?



  • Es soll eine dll werden.
    MFC dynamisch oder statisch, macht doch keinen Unterschied, oder?
    Dynamisch soll heißen, dass es nicht mit eingebunden wird. Kleine Dateigröße, man brauch aber die Dateien auf anderen Computern.
    Und die Compiler Einstellungen sind vielleicht der Fehler.

    Bei der Anfrage beim Hersteller des Hauptprogram kam die Antwort

    Soweit ich das aus der Fehlermeldung sehen kann benutzt der Herr *** in seiner DLL die MFC sowohl als statisch gelinkt (mfcs42.lib) als auch dynamisch gelinkt. Das ist also ein Problem seiner Projekteinstellungen innerhalb des Deverloperstudios.

    Ich bin völlig ratlos und alles steht und fällt damit.



  • etsmart schrieb:

    MFC dynamisch oder statisch, macht doch keinen Unterschied, oder?

    Doch, es macht einen Unterschied - besonders wenn du beides miteinander mischst. Das heißt, praktisch bieten beide Varianten ihre Vorteile (dynamisch ist kleiner, statisch braucht keine Zusatzdateien), aber du solltest deine bevorzugte Version durchgängig verwenden.



  • 😕 Wie denn 😕
    Man merkt, ich bin noch relativ neu dabei. Leider gibts da wenig Genaues drüber zu finden.
    Wie stell ich das ein, wo gibts eine Anleitung darüber.


  • Mod

    Schmeiß doch bitte noch mal einen Link an mit /verbose (ohne LIB).

    Also ich empfehle Dir die Technical Notes zu lesen!

    Das Problem ist einfach was tut die LIB und mit welchen Optionen ist sie erzeugt. Welche CRT nutzt diese. Mischen verschiedener CRT Versionen führt in den aller mesiten Fällen (wenn die Interfaces eben nicht klar isoliert sind), zum Crash.

    Der Verbose Link wird mir zeigen welche Objekt Datei zuerst diese LIB zieht und diese wiederum zieht DllMain aus der CRT.

    Wenn die MFC zuerst eingebunden ist dürfte in keinerm Fall mehr die DllMain der CRT gezogen werden.
    Dein Projekt ist offensichtlich falsch konfoiguriert. Just my 2 cents! 🕶



  • Ich denke ich habs jetzt.
    1. Unter Projekteinstellung->Linker
    Ankreuzen 'erzeugt keine LIB' und 'Inkrementelles Binden'
    2. Gegebenenfalls unter Objekt-/Bibliothek Module das Nötige Eintragen.
    3. Projekteinstellung->Allgemein
    MFC in einer gemeinsam genutzten DLL verwenden
    4. Projekteinstellung->Linker
    Eintragen bei Bibliotheken ignorieren
    bei Release libc
    bei Debug libd

    Keine der Projektdateien sollte StdAfx.h einbinden, dass kann die Reihenfolge ebenfalls durcheinander bringen.

    Und da muss man erst einmal drauf kommen!

    Danke für die Hilfe, ich würde sonst noch immer daran hängen.


  • Mod

    Der Weg ist der brutalo Weg, den Du gewählt hast. Im Endeffekt muss das normale Projekt zuerst die MFC Bibliotheken finden. Aus irgend einem Grund wurden aber andere Bibliotheken zuerst gezogen.

    zu 1. Hat keinen Einfluß, kannst Du vergessen!
    zu 2. hängt davon ab wie Deine andere Bibliothek arbeitet
    zu 3. s.o. meine Anmerkung.


Anmelden zum Antworten