Probleme mit dem VS C++-Linker...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Probleme mit dem VS C++-Linker...

    Hallo ich bins mal wieder....

    Ich hoffe jemand nutzt/hat die irrlicht engine schonmal genutzt.Ich hab nämlich ein problem von dem ich eigentlich weiß warum es auftritt aber nicht genau weiß was ich dagegen machen muss.

    Also ich hab das Irrlicht SDK ordnungsgemäß eingerichtet und die Include-Files und die Lib-Files auch in der IDE eingebunden(ich nutze Visual C++ 6.0).
    Von der Irrlicht-Website hab cih mri auch schonmal ein kleines Tutorial angesehen und auch fehlerfrei meinen ersten Code geschreiben.

    Wen ich allerdings den Linker starte bekomme ich vom Linker folgende Fehlermeldung:


    --------------------Konfiguration: Irrlichtdemo - Win32 Debug--------------------
    Linker-Vorgang läuft...
    LIBCD.lib(wincrt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16
    Debug/Irrlichtdemo.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Irrlichtdemo.exe - 2 Fehler, 0 Warnung(en)


    Weiß jemand wie ich das Problem lösen kann?

    Wäre net.Danke^^

    MfG Ska[/quote]
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • "phax" schrieb:

    Du hast scheinbar nur eine "main" Funktion.
    Der Linker benötigt aber eine "WinMain" Funktion welche für alle Applikationen die im "Windows" Subsystem laufen benötigt werden - Achtung: andere Parameter als main!

    Also entweder main auf WinMain ändern oder die Linker-Option "-subsystem:console" einfügen.

    hth


    Ich bedanke mich herzlich,jetzt funktioniert es ^^

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • Also ich hab da mal wieder n en Problem *drop*

    Eigenartigerweise hat es bei meinem Bespielprojekt prolemlos geklappt mit dem einfügen von "-subsystem:console" jetzt habe ich ein eignes Projekt grstartet und wegen eben jenem Problem "-subsystem:console" angefügt.

    Jedoch bekomme ich trozdem wiedermal folgende Ausgabe wenn ich Linken wil:


    --------------------Konfiguration: ORPG_Server - Win32 Debug--------------------
    Linker-Vorgang läuft...
    LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
    Debug/ORPG_Server.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    ORPG_Server.exe - 2 Fehler, 0 Warnung(en)


    Jemand ne Ahnung warum es trozdem nicht klappt? O.O
    Wäre wirklich dankbar wenn jemand Rat wüsste^^

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • "phax" schrieb:

    Jetzt fehlt beim main wahrscheinlich ein "__cdecl" davor.
    Das ist eine MSVC++ Eigentümlichkeit, dass man die Calling Convention angeben muss:

    Quellcode

    1. int __cdecl main (int argc, char** argv)
    2. {
    3. ...
    4. }


    hth


    Jup so funktioniert es auch.Komischerweise liegt das aber nicht nur an dem richtigen AUfbau der Main Funktion.Jaja diese MS frage Gates oder Gates nich.
    Das is irgendwie unbeständig.

    Aber so funktioniert es auch.Danke nochmal^^

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • Ich bins mal wieder.....^^


    Im Zuge meines jüngst gestarteten Projektes nutze ich das DirectX SDK und WinAPI.Ich habe auch soweit alles im Griff,leider habe ich da mal wieder
    eine "nicht aufgelösten externen Verweis":


    --------------------Konfiguration: ORPG_Server - Win32 Debug--------------------
    Linker-Vorgang läuft...
    ORPG_Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol "long __stdcall ServerMsgHandler(void *,unsigned long,void *)" (?ServerMsgHandler@@YGJPAXK0@Z)
    ORPG_Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol _CLSID_DirectPlay8Server
    ORPG_Server.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IDirectPlay8Server
    Debug/ORPG_Server.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    ORPG_Server.exe - 4 Fehler, 0 Warnung(en)


    Das is natürlich sehr bitter.Alles funktioniert problemlos,eben nur wieder dieser verteufelte Linker macht mir zu schaffen.
    Wäre wirklcih unendlich dankbar wenn mir jemand sagen könte was ich diesmal
    falsch mache^^

    Danke im vorraus!

    MfG Skabus
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • Die Methode "ServerMsgHandler" wird verwendet, wurde aber nur deklariert und nicht implementiert (oder nur mit anderer Calling Convention).
    Hast du irgendwo die Variable "CLSID_DirectPlay8Server" (wieder ohen Unterstrich) deklariert? Wenn ja dann fehlt deren Definition. (Deklaration: extern int CLSID_DirectPlay8Server; Definition: int CLSID_DirectPlay8Server; -- ich hoffe du weiß was ich meine)
    Bei Variablen bitte aufpassen, da es einen Unterschied macht, ob diese in einem extern "C" Block liegen oder nicht.
    Viel Erfolg!
  • "phax" schrieb:

    Die Methode "ServerMsgHandler" wird verwendet, wurde aber nur deklariert und nicht implementiert (oder nur mit anderer Calling Convention).
    Hast du irgendwo die Variable "CLSID_DirectPlay8Server" (wieder ohen Unterstrich) deklariert? Wenn ja dann fehlt deren Definition. (Deklaration: extern int CLSID_DirectPlay8Server; Definition: int CLSID_DirectPlay8Server; -- ich hoffe du weiß was ich meine)
    Bei Variablen bitte aufpassen, da es einen Unterschied macht, ob diese in einem extern "C" Block liegen oder nicht.
    Viel Erfolg!


    Danke schonmal^^

    Das Problem ist nur das ich nicht genau weiß wie cih das anstelle.Ich benutze das Buch "Progarmmign Role Playing Games with DirectX by Jim Adams" und dessen
    Quellcode funktioniert problemlos...Genau weiß ich nciht was an meinem Code
    falsch ist...vllt. kann ihn sich ja mal wer durchlesen udn schauen wos hakt...

    Quellcode

    1. //include the needed files for the programm
    2. #include "server_H.h"
    3. int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR CmdLine,int nCmdShow)
    4. {
    5. //create main window
    6. if((hWnd = CreateMainWindow(hInst)) == NULL)
    7. {
    8. //error occured
    9. MessageBox(0,"Unable to create the window","Fatal Error",MB_OK | MB_ICONEXCLAMATION);
    10. return 0;
    11. }
    12. //handle for the messages
    13. MSG Msg;
    14. while(GetMessage(&Msg,NULL,0,0))
    15. {
    16. //send the messages to the callbackfunction
    17. TranslateMessage(&Msg);
    18. DispatchMessage(&Msg);
    19. }
    20. //return value to windows
    21. CoUninitialize();
    22. return 0;
    23. }
    24. HWND CreateMainWindow(HINSTANCE hInstance)
    25. {
    26. //set up the window class
    27. WNDCLASSEX wcex;
    28. //define the prameters of the window class
    29. wcex.cbSize = sizeof(WNDCLASSEX); //define the size of the window class
    30. wcex.style = (CS_DBLCLKS | CS_OWNDC |
    31. CS_HREDRAW | CS_VREDRAW); //set the style for the window
    32. wcex.lpfnWndProc = MessageHandler; //callback function
    33. wcex.cbClsExtra = 0; //NULL
    34. wcex.cbWndExtra = 0; //NULL
    35. wcex.hInstance = hInstance; //instance of the application
    36. wcex.hIcon = LoadIcon(GetModuleHandle(NULL),
    37. MAKEINTRESOURCE(ID_MENU_ICON)); //load the Icon for the application
    38. wcex.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL),
    39. MAKEINTRESOURCE(ID_MENU_ICON),
    40. IMAGE_ICON,16,16,0); //load the small icon for the application
    41. wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //load the Cusor for the application
    42. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW); //define the brush for the background
    43. wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); //define the menue for the application
    44. wcex.lpszClassName = "ORPG_Class"; //name of teh window class
    45. CoInitialize(NULL);
    46. //register the window class
    47. RegisterClassEx(&wcex);
    48. return CreateWindowEx(NULL, //extended sytles(NUL for nothing)
    49. "ORPG_Class", //name of the window class
    50. "ORPG Server", //name of the window caption
    51. WS_OVERLAPPEDWINDOW | //attributes
    52. WS_VISIBLE, //of the window
    53. 0,0, //position of the window
    54. 400,300, //size of the window
    55. NULL, //handle of the parentwindow(NULL for main)
    56. NULL, //handle of the menue
    57. hInstance, //handle of the application instance
    58. NULL);
    59. }
    60. LRESULT CALLBACK MessageHandler(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
    61. {
    62. //handles with the sended messages
    63. switch(Msg)
    64. {
    65. case WM_DESTROY:
    66. PostQuitMessage(0);
    67. return 0;
    68. break;
    69. case WM_CLOSE:
    70. DestroyWindow(hWnd);
    71. break;
    72. case WM_COMMAND:
    73. switch(LOWORD(wParam))
    74. {
    75. case ID_SERVER_START:
    76. break;
    77. //etc.
    78. }
    79. break;
    80. //etc.
    81. }
    82. //if any other messages was sended call the DefWindowsProc function
    83. return DefWindowProc(hWnd,Msg,wParam,lParam);
    84. }
    85. BOOL start_server()
    86. {
    87. if(FAILED(CoCreateInstance(CLSID_DirectPlay8Server,NULL,CLSCTX_INPROC,
    88. IID_IDirectPlay8Server,(void**)&pDPServer)))
    89. {
    90. MessageBox(0,"Can`t create serverobject!","Fatal Error",MB_OK | MB_ICONEXCLAMATION);
    91. return FALSE;
    92. }
    93. if(FAILED(pDPServer->Initialize(NULL,ServerMsgHandler,0)))
    94. {
    95. MessageBox(0,"Unable to initialize the Server!","Fatal Error",MB_OK | MB_ICONEXCLAMATION);
    96. return FALSE;
    97. }
    98. return TRUE;
    99. }
    Alles anzeigen




    Hier die Headerdatei:

    Quellcode

    1. #ifndef _ORPG_SERVER_HEADER_
    2. #define _ORPG_SERVER_HEADER_
    3. #include <windows.h>
    4. #include <stdio.h>
    5. #include <stdarg.h>
    6. #include <dpaddr.h>
    7. #include <dplay8.h>
    8. #include "resource.h"
    9. #pragma comment(lib,"dplay.lib")
    10. HWND hWnd;
    11. HWND CreateMainWindow(HINSTANCE hInstance); //prototyp of the createmainwindow function
    12. LRESULT CALLBACK MessageHandler(HWND hWnd,UINT Msg,
    13. WPARAM wParam,LPARAM lParam); //prototype of the messageHandler
    14. HRESULT WINAPI ServerMsgHandler(PVOID pvUserContext,DWORD dwMessageId,PVOID pMsgBuffer);
    15. int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR CmdLine,int nCmdShow); //entry Point
    16. IDirectPlay8Server *pDPServer;
    17. #endif
    Alles anzeigen


    Wie gesagt es ist alles vom SDK abhängig.Ich weiß nun nur ncith ob und wo cih dann CLSID_IDirectPlay8Server definieren muss.Im Grund eist es ja ein
    schon vorher deklaierter Handle um bei der Funktion CoCreateInstance()
    anzugeben das es sich bei dem zu erstellenden Objekt um ein Serverobjekt und nicht um eine DpAdresse oder so handelt.

    Wäre wirklich klasse wenn sich jemand mal den Code durchsehen könnte und mir genau sagen könnte wo was fehlt.

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • Also ich ahb nun versucht dxguid einzubinden einmal mit #prgama comment und einmal über die Projekteinstellung,jedoch bleibt der Fehler der selbe.

    Was den ServerMsgHandler angeht,meinst du ich solle lediglich die Funktion normal programmieren,also das was sie tatsächlich macht ioder wie meinst du das?^^"


    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • "Skabus" schrieb:

    Also ich ahb nun versucht dxguid einzubinden einmal mit #prgama comment und einmal über die Projekteinstellung,jedoch bleibt der Fehler der selbe.

    Die müssen in irgendeiner .LIB-Datei sein. Such mal mit der Explorer-Suche nach *.lib Dateien mit dem enthaltenen Text "CLSID_IDirectPlay8Server"

    "Skabus" schrieb:

    Was den ServerMsgHandler angeht,meinst du ich solle lediglich die Funktion normal programmieren,also das was sie tatsächlich macht ioder wie meinst du das?^^"

    Genau!
  • Hm...also ich hab das jetzt mal gesucht.....HIER wird eben jener genannter Handle definiert....in der dplay8.h-datei,die ich ja schon inkludiert habe:

    Quellcode

    1. #ifndef __DIRECTPLAY8_H__
    2. #define __DIRECTPLAY8_H__
    3. #include <ole2.h> // for DECLARE_INTERFACE_ and HRESULT
    4. #include "dpaddr.h"
    5. #ifdef __cplusplus
    6. extern "C" {
    7. #endif
    8. /****************************************************************************
    9. *
    10. * DirectPlay8 CLSIDs
    11. *
    12. ****************************************************************************/
    13. // {743F1DC6-5ABA-429f-8BDF-C54D03253DC2}
    14. DEFINE_GUID(CLSID_DirectPlay8Client,
    15. 0x743f1dc6, 0x5aba, 0x429f, 0x8b, 0xdf, 0xc5, 0x4d, 0x3, 0x25, 0x3d, 0xc2);
    16. // {DA825E1B-6830-43d7-835D-0B5AD82956A2}
    17. DEFINE_GUID(CLSID_DirectPlay8Server,
    18. 0xda825e1b, 0x6830, 0x43d7, 0x83, 0x5d, 0xb, 0x5a, 0xd8, 0x29, 0x56, 0xa2);
    19. // {286F484D-375E-4458-A272-B138E2F80A6A}
    20. DEFINE_GUID(CLSID_DirectPlay8Peer,
    21. 0x286f484d, 0x375e, 0x4458, 0xa2, 0x72, 0xb1, 0x38, 0xe2, 0xf8, 0xa, 0x6a);
    22. // CLSIDs added for DirectX 9
    23. // {FC47060E-6153-4b34-B975-8E4121EB7F3C}
    24. DEFINE_GUID(CLSID_DirectPlay8ThreadPool,
    25. 0xfc47060e, 0x6153, 0x4b34, 0xb9, 0x75, 0x8e, 0x41, 0x21, 0xeb, 0x7f, 0x3c);
    26. // {E4C1D9A2-CBF7-48bd-9A69-34A55E0D8941}
    27. DEFINE_GUID(CLSID_DirectPlay8NATResolver,
    28. 0xe4c1d9a2, 0xcbf7, 0x48bd, 0x9a, 0x69, 0x34, 0xa5, 0x5e, 0xd, 0x89, 0x41);
    29. /****************************************************************************
    30. *
    31. * DirectPlay8 Interface IIDs
    32. *
    33. ****************************************************************************/
    34. typedef REFIID DP8REFIID;
    35. // {5102DACD-241B-11d3-AEA7-006097B01411}
    36. DEFINE_GUID(IID_IDirectPlay8Client,
    37. 0x5102dacd, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
    38. // {5102DACE-241B-11d3-AEA7-006097B01411}
    39. DEFINE_GUID(IID_IDirectPlay8Server,
    40. 0x5102dace, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
    41. // {5102DACF-241B-11d3-AEA7-006097B01411}
    42. DEFINE_GUID(IID_IDirectPlay8Peer,
    43. 0x5102dacf, 0x241b, 0x11d3, 0xae, 0xa7, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
    44. // IIDs added for DirectX 9
    45. // {0D22EE73-4A46-4a0d-89B2-045B4D666425}
    46. DEFINE_GUID(IID_IDirectPlay8ThreadPool,
    47. 0xd22ee73, 0x4a46, 0x4a0d, 0x89, 0xb2, 0x4, 0x5b, 0x4d, 0x66, 0x64, 0x25);
    48. // {A9E213F2-9A60-486f-BF3B-53408B6D1CBB}
    49. DEFINE_GUID(IID_IDirectPlay8NATResolver,
    50. 0xa9e213f2, 0x9a60, 0x486f, 0xbf, 0x3b, 0x53, 0x40, 0x8b, 0x6d, 0x1c, 0xbb);
    Alles anzeigen


    Aber wie gesagt der Fehler besteht weiterhin...oO

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • Hmm...ich hab mal rumgesucht,aber nichts gefunden.
    Steht nirgends wo dieses Makro definiert ist.

    Ich hab mir mal die dxguid.lib angesehen udn dort sind CLSID_.... und IID_....
    definiert.Ich habs aber mittels:

    Quellcode

    1. #pragma comment(lib,"dxguid.lib")


    und bei Projekteistellung bereits eingebunden.Daran kanns auch nich liegen.
    Kannst du mir etvl. nen Link geben zu nem deutsch oder englischsprachigen
    Tutorial zum Thema DirectPlay?Ich google gerade aber finde nichts gescheites.

    Danke aber trozdem für deine Hilfe,auch wenn ich immernoch net verstehe was das problem ist >.>

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]