Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Creación de objeto IDirect3D9 sin usar Direct3DCreate9

Iniciado por fiero, 09 de Mayo de 2003, 03:58:39 PM

« anterior - próximo »

fiero

                                Quiero crear el objeto IDirect3D9 de mi aplicación sin utilizar la función Direct3DCreate9. Estoy buscando si hay alguna manera de crear un puntero a la interface usando alguna función QueryInterface, pero no encuentro como.

La razón es que no quiero incluir el fichero d3d9.lib en mi proyecto, para que al ejecutar el programa en ordenadores que no tengan DX9, no dé el error "No se encuentra el fichero d3d9.dll en su sistema".

¿Alguien sabe la manera de hacer esto?

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

Grugnorr

                                Esa no es la forma de solucionarlo, lo que debes hacer es cargar explícitamente d3d9.dll así sabrás si existe o no. Supongo que es por mostrar un mensaje de error más claro....                                
hat the hells!

fiero

                                Al crear la aplicación chequeo la versión de DX y si es DX9 se podrá usar render por hardware, si no se utiliza el render soft. Si no están instaladas las DX9 no utilizo la inicialización de IDirect3D9, pero como está incluida en el código, me sale ese mensaje de sistema.

El problema es que no me deja chequear si existe o no d3d9.dll , ya que el error salta antes de empezar la ejecución del programa. Es una aplicación MFC así que no sé si las MFC hacen un chequeo de todas las dll que utiliza el programa antes de ejecutarlo o algo así, o es cosa del sistema....                                
www.videopanoramas.com Videopanoramas 3D player

MChiz

                                Tu problema esta en que incluyes el LIB al proyecto. Conocia tu problema, pero con GL, aunque tampoco se muy bien como va :b
Siento no poder darte una ayudita mejor que esta:
Lo que tienes que hacer es NO incluir los LIBs en el proyecto y cargar a mano las funciones que vayas a usar, con sus respectivas DLLs, claro.
Quizas alguien de por aqui pueda hecharte una mano.
Suerte!                                

fiero

                                Vale, ya lo he solucionado como dices MChiz.

La verdad es que hay algunas cosas del SDK de DX que no son muy útiles a no ser que se inicie de esta manera. Por ejemplo, detectar la versión, no sirve de nada si se llama a la inicialización de forma estática, ya que te sale ese mensaje tan feo de "falta dll".

Bueno, esto es lo que he hecho:
   HINSTANCE m_hD3Ddll;

   IDirect3D9* (CALLBACK* funcionCreate)(UINT);

   m_hD3Ddll=AfxLoadLibrary("d3d9.dll");

   if(m_hD3Ddll!=NULL)

   {

       funcionCreate=(IDirect3D9* (CALLBACK*)(UINT))GetProcAddress(m_hD3Ddll,"Direct3DCreate9");

       if(funcionCreate!=NULL)

       {

           m_pD3D=funcionCreate(D3D_SDK_VERSION);

       }

   }



   ...

   AfxFreeLibrary(m_hD3Ddll);


gracias por las respuestas :)
un saludo                                
www.videopanoramas.com Videopanoramas 3D player

MChiz

                                Ei!! Me alegro de haberte ayudado : )
Y gracias a ti por comentar como lo has arreglado. Es muy bueno saberlo.
Un saludote!!                                

Grugnorr

                                Cargar la dll con LoadLibrary() es cargar explícitamente la dll..... seré más explícito la próxima vez  :jaja:                                
hat the hells!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.