Warnung von LINK: was bedeutet das?
-
Hallo
mein erster Post erstam Hallo

bin am lernen von C# hab halt die popelige Hello anwendung programmiert
nach ein paar kleinen änderungen hab ich dann die .exe erstllt und erhielt flgende Warnung:LINK : warning LNK4089: Alle Verweise auf 'OLEAUT32.dll' wurden durch /OPT:REF verworfen
is zwar "nur" eine Warnung aber würde mich interesieren was diese meldung bedeutet
dange schonmal im voraus
gruß
MoDAXP.S. ich hoffe ich langweil und unterforder euch nicht mit meinen newbie fragen

P.P.S. EDIT ups sorry ganz vergessen ich arbveite mit vis studio.NET
-
Hallo,
was waren es denn für Änderungen? Vielleicht zeigst Du mal etwas Code oder ist es nur Console.WriteLine("Hello ...");. Hast Du die Anwendung vor den Änderungen schon mal ausgeführt?
-
/OPT:REF killt alle Referenzen die nicht referenziert werden :p
sprich: wenn du /OPT:REF angibst und foo.dll linkst, aber keine Funktion aus foo.dll verwendest - dann wird foo.dll nicht gelinkt. Und genaus das sagt dir der linker.
Lösung:
entweder /OPT:REF in /OPT:NOREF umwandeln
oder
'OLEAUT32.dll' einfach nicht mitlinken
-
hmm ich hab die oleaut32.dll nicht angegeben beim debugger kommt folgende meldung:
'Hello.exe': 'C:\Dokumente und Einstellungen\MoDAX\Eigene Dateien\Visual Studio Projects\Hello\Debug\Hello.exe' geladen, Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\ntdll.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\kernel32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\mfc71d.dll' geladen, Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\msvcr71d.dll' geladen, Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\gdi32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\user32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\advapi32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\rpcrt4.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\shlwapi.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\msvcrt.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\comctl32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\oleaut32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\ole32.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\MFC71DEU.DLL' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\Programme\Logitech\MouseWare\system\LgWndHk.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\msctf.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\CTAGENT.DLL' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\Programme\Gemeinsame Dateien\Logitech\Scrolling\LGMSGHK.DLL' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\msvcp60.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\version.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\version.dll' entladen
'Hello.exe': 'C:\WINDOWS\system32\mslbui.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\Programme\Steganos Security Suite 4\SteganosServiceHook.dll' geladen, Keine Symbole geladen.
'Hello.exe': 'C:\WINDOWS\system32\winspool.drv' geladen, Keine Symbole geladen.
Das Programm "[3188] Hello.exe: Systemeigen" wurde mit Code 2 (0x2) beendet.und der code zum prog ist dieser:
// HelloDlg.cpp : Implementierungsdatei // #include "stdafx.h" #include "Hello.h" #include "HelloDlg.h" #include ".\hellodlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CAboutDlg-Dialogfeld für Anwendungsbefehl 'Info' class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialogfelddaten enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung // Implementierung protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CHelloDlg Dialogfeld CHelloDlg::CHelloDlg(CWnd* pParent /*=NULL*/) : CDialog(CHelloDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CHelloDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CHelloDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDHELLO, OnBnClickedHello) ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) ON_BN_CLICKED(IDWIRKLICH, OnBnClickedWirklich) END_MESSAGE_MAP() // CHelloDlg Meldungshandler BOOL CHelloDlg::OnInitDialog() { CDialog::OnInitDialog(); // Hinzufügen des Menübefehls "Info..." zum Systemmenü. // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt // wenn das Hauptfenster der Anwendung kein Dialogfeld ist SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden // TODO: Hier zusätzliche Initialisierung einfügen return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten } void CHelloDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie // den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das // Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt.z void CHelloDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // Gerätekontext zum Zeichnen SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Symbol in Clientrechteck zentrieren int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer // das minimierte Fenster mit der Maus zieht. HCURSOR CHelloDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CHelloDlg::OnBnClickedHello() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. // benutzer begrüssen MessageBox("Servus. dies ist meine erste Anwendung","Meine erste Hello Anwendung"); } void CHelloDlg::OnBnClickedButton1() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. //nicht drücken scherz *g* MessageBox("Du Nase ich hab doch gesagt du sollst nicht drücken!!! Mach das nie wieder!!","WARNUNG!!"); } void CHelloDlg::OnBnClickedWirklich() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. //HAHA MessageBox("MUAHAHAHAAAAAAA Du glaubst doch nicht wirklich das das so einfach ist? *g*","Reingelegt!"); }kann es sein das die dll mit der stdafx.h angesprochen wird? andererseits wundert mich das nach dem debugger wird aus der betroffenen dll keine symbol geladen aber das ist nicht die einzige aus der nichts geladen wird
hab auch schn im netz gesucht was die dll für eine da seins berechtigung hat weiß aber lediglich das das eine systemdatei ist bzw im system 32 ordner steckt
gruß
MoDAX
-
Die Meldungen sind doch auch logisch. Debugger will Debug-Symbole laden, und dein System hat halt keine Debug Systeme in den Systemkomponenten (es gibt angeblich auch eine Debugversion von Windows, kenn mich da aber nicht aus).
Welche DLLs er linkt hängt auch von deinem Code ab. Ich bin nicht fit in der MFC (frag da am besten im MFC Forum) - aber ich nehme mal an, dass die MFC diese DLLs braucht.
Ist es nicht egal wenn der Linker bzw. Debugger solche Meldungen ausgibt? Es sind ja keine Warnungen im eigentlichen Sinne, sondern eher Statusmeldungen...
-
@modax
Was hat das mit C# zu tun???
-
ups ja sorry C++.NET so ists richtig
ja die meldungen sind klar aber warum er ausgerechnet die oleaut32 rauskickt wundert mich halt ich frag mal im mfc forum nach
oder kann der thread evtl verschoben werden?
gruß
MoDAX
-
Auch wenn es ein wenig spät kommt. Ich verschieb dich mal da hin
-
VC++ hat festegestellt das du die oleaut32.dll nicht brauchst oder ähnliches. Näheres kann man nur herausfi8nden wenn man sich mit dem Linker beschäftigt.
Das sie im Moment des Linkens nicht gebraucht wird heißt aber nicht das sie nicht gebrauchst wird. Es kann ja sein das eine andere DLL diese braucht und dies zur Laufzeit nicht gekannt ist.
-
AndreasW schrieb:
Auch wenn es ein wenig spät kommt. Ich verschieb dich mal da hin
dange

jo hab mittlerweile rausgefunden das das die optimierung für ein release ist im debug-modus läuft /OPT:NOREF also werden verweise beibehlaten die eigtl das programm gar nciht interessieren bzw. nicht benötigt werden und beim relaese schaltet der linker dann auf /OPT:REF um, um das programm zu optimieren somit werden alle Paketfunktionen rausgeschmissen die für das prog nicht benutzt werden.
gruß
MoDAX