VC++ és a COM (reset mentesség)

VC++ és a COM (reset mentesség)
2007-11-01T12:08:33+01:00
2007-11-02T11:08:13+01:00
2022-11-06T11:50:41+01:00
Magic--Forest
Sziasztok...
Bár eddig se voltam semi, de újabb vicces dologgal állok elő:

Feltettem a Visual Studio .net 2005-öt
Hozzá adtam az SDK include és Bin könyvtárakat
és Írtam egy alap DX programot.

Fordításkor ezt a hibát kaptam:
DirectXtutorial.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
Debug/DirectXtutorial.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.


Utána néztem, de nem oldotta meg a problémám az hogy:
-leszedni a VC++ 2005 .net alkalmazást
-felrakni a VC++ standard alkalmazást, hogy
ne legyen a COM (mittomén) miatt probléma.

A vicces minden beállítás megmarad, így a COM rész is. Mit tegyek? Váltsak DEV-re?
Mutasd a teljes hozzászólást!
#include <d3d9.h> //ez a sor ^ utan beirod ezt: #pragma comment( lib, "d3d9" )

---
Mi az a "reset mentesség" a topiccímből??
Mutasd a teljes hozzászólást!

  • Megnéztem VisualC++ .net és standard módban ill dev-cpp ben
    semmi változás.. nincs ötletem
    kérlek segítsetek, megadom a forrást is:


    #include <d3d9.h> LPDIRECT3D9 g_pD3D = NULL; // A Direct3D interface LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Direct3D eszköz. Ezen keresztül rajzolunk HRESULT InitD3D(HWND hWnd) { if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) // Egy Direct3D interface kérése return E_FAIL; D3DDISPLAYMODE d3ddm; // A rajzolófelület beállítandó formátuma if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm))) // Mivel ablakban fog futni, így a formátum return E_FAIL; // formátuma lesz D3DPRESENT_PARAMETERS d3dpp; // A rajzolófelület további paraméterei ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; // Ablakban fut d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // A képváltás módja. A régit eldobjuk d3dpp.BackBufferFormat = d3ddm.Format; // A képernyo formátuma, amit az elobb beállítottunk // Létrehozzuk az eszközt, ami összekapcsolja a programunkat a videókártyával. if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, // Az elsodleges videókártyát használjuk D3DDEVTYPE_HAL, // Az eszköz típusa. Kihasználjuk a kártya hardveres tulajdonságait hWnd, // Az ablak handleje, amelyre az eszköz rajzolhat D3DCREATE_SOFTWARE_VERTEXPROCESSING, // Szoftveres vertex számítást alkalmazunk. &d3dpp, // Az elobb beállított eszköztulajdonságok a formátumhoz &g_pd3dDevice))) // Mutató az eszközre amelyet létrehozunk return E_FAIL; return S_OK; } void Cleanup() { if( g_pd3dDevice != NULL) // Ha már létrehoztuk az eszközt, akkor megsemmisítjük g_pd3dDevice->Release(); if( g_pD3D != NULL) // Ha már létrehoztuk a Direct3D interfacet, akkor megsemmisítjük g_pD3D->Release(); } void Render() { g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 0.0f, 0); // A rajzoló bufferek törlése /* Nos a hátsóbuffer tartalma törölve, ideje megjeleníteni. A képváltást az IDirect3DDevice9 interface Preset függvénye végzi. Mindegyik paraméter NULL-ra állításával azt érjük el, hogy a teljes hátsóbuffer megjelenik a képernyon. */ g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); // A bufferek cserélése } LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch(msg) { case WM_DESTROY: // Ha az üzenet bezárás, akkor erre utasítjuk az ablakot is PostQuitMessage(0); return 0; case WM_PAINT: // Ha az üzenet rajzolás, akkor rendelünk Render(); return 0; case WM_KEYDOWN: // Ha lenyomtunk egy billentyüt { if (wParam == VK_ESCAPE) PostQuitMessage(0); // és az az ESC, akkor kilépésre utasítjuk az ablakot return 0; } } return 0; } int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int) { //A WNDCLASSEX egy ablakhoz tartalmazza az ablak //osztályának létrehozásához szükséges adatokat. WNDCLASSEX wc = { sizeof(WNDCLASSEX), // a struktúra mérete CS_NOCLOSE, // az ablakon nem lesz bezárás gomb MsgProc, // egy mutató az ablak üzenetkezelo függvényére 0L, // az extra byteok száma az ablak osztályához 0L, // az extra byteok száma az ablak példányához GetModuleHandle(NULL), // a handle az exe file handleja lesz NULL, // az ikon handle NULL, // a kurzor handle NULL, // a háttér handle NULL, // az ablak fomenüjének neve "Tutorial1", // az osztály neve NULL }; // kis ikon handle RegisterClassEx( &wc ); // Az elobb definiált ablakosztályt regisztrálja be HWND hWnd = CreateWindow( "Tutorial1", // a létrehozandó ablak osztályának neve "Monster3D - Tutorial 1 - Direct3D felület létrehozása", // az ablak felirata WS_BORDER, // az ablak stílusa 100, // az ablak vízszintes pozíciója 100, // az ablak függoleges pozíciója 640, // az ablak szélessége 480, // az ablak magassága GetDesktopWindow(), // a szülo ablak handle NULL, // menü handle wc.hInstance, // az alkalmazás példányának handleja NULL ); // paraméterek a WM_CREATE-nak if(SUCCEEDED(InitD3D(hWnd))) // Ha sikerül inicializálni a Direct3D-t akkor megyünk tovább { ShowWindow(hWnd, SW_SHOWDEFAULT); // Megjelenítjük az ablakot UpdateWindow(hWnd); // frissítjük a tartalmát MSG msg; // Ebben fogadjuk majd az üzeneteket ZeroMemory(&msg, sizeof(msg)); while(msg.message!=WM_QUIT) // A fociklus. Ez vezérli majd a programot { if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) // Megnézzük van-e várakozó üzenet { TranslateMessage(&msg); // Átalakítjuk az üzenetet, hogy DispatchMessage(&msg); // az MsgProc tudjon vele mit kezdeni } else Render(); // Ha nincs üzenet, akkor rendelünk } } Cleanup(); // A Direct3D eltuntetése UnregisterClass("Tutorial1", wc.hInstance); // az ablak eltuntetése return 0; };

    Jah DirectX SDK 2007 november van meg
    és beállítva:
    Cpp -> menü -> options -> Directory
    - source: C:\ProgramFiles\Microsoft DirectX SDK (November 2007)\source
    - Bin: C:\ProgramFiles\Microsoft DirectX SDK (November 2007)\Bin
    mindkettőt az elejére mozgattam...
    Mutasd a teljes hozzászólást!
  • Jah ha valaki segít megoldani, már adom is az E.M.-et
    (Elfogadás megoldásként)
    Mutasd a teljes hozzászólást!
  • Hozzálinkelted a d3d9.lib-et? /properties->linker->input->additional dependencies/
    Mutasd a teljes hozzászólást!
  • #include <d3d9.h> //ez a sor ^ utan beirod ezt: #pragma comment( lib, "d3d9" )

    ---
    Mi az a "reset mentesség" a topiccímből??
    Mutasd a teljes hozzászólást!
  • Így azt írja ki:
    DirectXtutorial.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
    Debug/DirectXtutorial.exe : fatal error LNK1120: 1 unresolved externals


    Amúgy abból, hogy uninstall után törlöm a telepített mappáz
    éd újratlepítem, éd megmarad a beállítás és minden
    pl Express-el uninstallálok, és felteszem a standard-ot éd mintha nem unindtstalláltam volna...
    Mutasd a teljes hozzászólást!
  • A végső megoldás:
    Source:
    - C:\..\DirectX SDK (2007 November)\source

    Bin:
    - C:\..\DirectX SDK (2007 November)\Bin
    - C:\..\DirectX SDK (2007 November)\Bin\X86

    Illetve még ez is kellett:
    #include <d3d9.h>
    #pragma comment( lib, "d3d9" )

    Köszönöm @sanyának
    Mutasd a teljes hozzászólást!
  • Amúgy a legtöbb IDE rendelkezik olyan projekt beállítással, ahol megadhatod a használt .lib állományokat.
    Nem ártana kissé tájékozódni a projekt témában.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd