error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'SQLHWND'
-
Weiß jemand was mit dem Fehler anzufangen. Ich nutze CSreadSheet(von Codeguru) um Daten aus einer CSV Datei auszulesen. Beim kompilieren kommt untenstehender Fehler.
In sqltypes.h steht in der Zeile, die den Fehler betrifft.
typedef HWND SQLHWND;HWND steht doch in windows.h, und das ist laut compiler schon eingebunden.
c:\program files\microsoft visual studio\vc98\include\sqltypes.h(114) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'SQLHWND' c:\program files\microsoft visual studio\vc98\include\sqltypes.h(114) : fatal error C1004: Unerwartetes Dateiende gefunden
-
Was steht denn direkt vor dieser Zeile in der fertig zusammengepackten Quelldatei? (ich gehe mal davon aus, daß die betroffene Stelle im Hauptprogramm liegt oder in dem Header, den du als letztes vor der "sqltypes.h" eingebunden hast)
-
Steht mitten drin
#if defined(WIN32) || defined(OS2) typedef HWND SQLHWND;In einem anderen Program habe ich das an verschiedenen Stellen eingebungen. Hat noch nie diesen Fehler rausgegeben.
Auszug aus C:\...\VC98\Include\sqltypes.h
typedef float SFLOAT; typedef void* PTR; typedef void* HENV; typedef void* HDBC; typedef void* HSTMT; typedef signed short RETCODE; #if defined(WIN32) || defined(OS2) typedef HWND SQLHWND; #elif defined (UNIX) typedef Widget SQLHWND; #else /* placehold for future O/S GUI window handle definition */ typedef SQLPOINTER SQLHWND; #endif #ifndef __SQLDATE #define __SQLDATE /* transfer types for DATE, TIME, TIMESTAMP */ typedef struct tagDATE_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT; #if (ODBCVER >= 0x0300) typedef DATE_STRUCT SQL_DATE_STRUCT;
-
*grübelt* Afaik ist HWND auch nur ein typedef (für einen Zeigertyp), also sollte das dort kein Problem bereiten - was sagt denn dein MSVC, wenn du dir die Definition von HWND anschauen willst?
-
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
-
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.
-
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.
-
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 libdKeine 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.
-
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.