Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 11:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



D3DXCreateTextureFromFile returnt d3dxerr_invaliddata

Discussion on D3DXCreateTextureFromFile returnt d3dxerr_invaliddata within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
D3DXCreateTextureFromFile returnt d3dxerr_invaliddata

Hallo,

Ich habe ein kleines Problem beim entwickeln einer Klasse.
Wenn ich D3DXCreateTextureFromFile aufrufe, wird immer
d3dxerr_invaliddata zurückgegeben. Die Textur ist im gleichen Ordner
wie die DLL.

Code :

Code:
#include <Windows.h>
#include <d3d9.h>
#include <d3dx9.h>

#pragma once
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
LPD3DXSPRITE sprite;
LPDIRECT3DTEXTURE9 gTexture;
void Init(LPDIRECT3DDEVICE9 pDevice,LPCTSTR path);
DWORD WINAPI Func(LPVOID lpParam);
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved )
{
if(fdwReason == DLL_PROCESS_ATTACH)
{
CreateThread(0,0,Func,0,0,0);
break;
}
return TRUE;
}

void Init(LPDIRECT3DDEVICE9 pDevice,LPCTSTR path)
{
    gTexture = NULL;
    sprite = NULL;
    HRESULT h1 = D3DXCreateSprite(pDevice,&sprite);
    if(h1 != S_OK)
    {
        MessageBox(NULL,L"Failed to Create Sprite",NULL,NULL);
        
    }
HRESULT h2 = D3DXCreateTextureFromFile(pDevice,path,&gTexture);


if(h2 != D3D_OK)
{
    if(h2 == D3DERR_NOTAVAILABLE){MessageBox(NULL,L"D3DERR_NOTAVAIBLE",0,0); }
    if(h2 == D3DERR_OUTOFVIDEOMEMORY){MessageBox(NULL,L"D3DERR_OUTOFVIDEOMEMORY",0,0); }
    if(h2 == D3DERR_INVALIDCALL){MessageBox(NULL,L"D3DERR_INVALIDCALL",0,0); }
    if(h2 == D3DERR_INVALIDCALL){MessageBox(NULL,L"D3DERR_INVALIDCALL",0,0); }
    if(h2 == D3DXERR_INVALIDDATA){MessageBox(NULL,L"D3DXERR_INVALIDDATA",0,0); }
    
}
}
DWORD WINAPI Func(LPVOID lpParam)
{
Init(/*Address of EndScene*/,"haha.png");
return 0;
}
Omdi is offline  
Old 11/12/2011, 22:35   #2
 
Xenox3's Avatar
 
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
Du musst den vollen Pfad angeben .

oder eben mit

GetModuleFileName

arbeiten.
Xenox3 is offline  
Old 11/13/2011, 08:20   #3





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
Ja natürlich habe ich auch schon gemacht.
Aber die haha.png liegt im gleichen Ordner.
Omdi is offline  
Old 11/13/2011, 11:35   #4
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
#include <d3dx9.lib>
????
Tyrar is offline  
Old 11/13/2011, 11:47   #5





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
Der Code ist nur schnell hier hingeklatscht.
Im original Code siehts anders aus :'D
Das war nur ein Flüchtigkeitsfehler meinerseits hier ;>
Omdi is offline  
Old 11/13/2011, 16:05   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
Versuch halt nicht FromFileEx sondern FromMemoryEx und öffne und lies die Datei vorher mit CreateFile und ReadFile.

INVALIDDATA heißt aber normalerweise nicht, dass das File nicht gefunden wurde. Textur beschädigt oder in unbekanntem Format?
MrSm!th is offline  
Thanks
1 User
Old 11/13/2011, 16:11   #7





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
Quote:
Originally Posted by MrSm!th View Post
Versuch halt nicht FromFileEx sondern FromMemoryEx und öffne und lies die Datei vorher mit CreateFile und ReadFile.

INVALIDDATA heißt aber normalerweise nicht, dass das File nicht gefunden wurde. Textur beschädigt oder in unbekanntem Format?
Danke erstmal.

Diesen Gedanken hatte ich auch zu erst, aber dann habe ich es noch mit einer .dds und .jpg File versucht. Ging nicht.
Ich versuchs erstmal mit dem, was du mir vorgeschlagen hast.

Edit : Muss ich dafür noch irgendeine Header File hinzufügen?
Bei mir ist sie nämlich nicht definiert und im Internet findet man auch nicht viel zu der Funk.

Gibts denn irgendeinen anderen Weg, so ein Bild auf den Monitor zu zeichnen ;O?
Ich hab mal irgendwas mit "Surface" in dem Zusammenhang gehört.
Omdi is offline  
Old 11/13/2011, 17:15   #8
 
Xenox3's Avatar
 
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
Xenox3 is offline  
Thanks
1 User
Old 11/13/2011, 17:50   #9


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
Die Klasse macht intern doch auch nichts anderes.

Vielleicht war es auch FromMemory, weiß ich nicht mehr ;O
Google doch einfach D3DXCreateTexture, da solltest du alle Versionen finden.
Oder schau bei D3DXCreateTextureFromFileEx unter see also.

Also auf Texturen bist du so oder so angewiesen. Ob du sie normal erstellst oder mit den D3DX Funktionen bleibt dir überlassen. Zweiteres ist aber zu empfehlen, da du sonst das Image Format selbst parsen und eine Textur mit CreateTexture erstellen müsstest.

Du kannst auch ohne Sprites zeichnen, indem du mit DrawPrimitive(UP) und Vertices arbeitest ;O Nichts anderes macht die Sprite-Klasse intern.
Die Variante bevorzuge ich auch, da man da mehr Freiheiten hat, allerdings ist es auch komplizierter und teilweise verdammt schwer in D3D Hooks einzubauen, da manche Game-Einstellungen das massiv beeinflussen.

Ach ja: Ist nur ne Vermutung, aber vielleicht beduetet INVALIDDATA in diesem Fall auch, dass das Image Format und die Image Info, die daraus ausgelesen wird, nicht zu den Device Einstellungen passt, mit denen es erstellt wurde.
MrSm!th is offline  
Thanks
1 User
Old 11/13/2011, 18:14   #10





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
Hmm...
Beim Aufrufen von ImageInfoObjekt->DrawImage(...) crasht jedes Spiel ;O.
Ich schätze mal, dass es auch crashen würde, wenn ich es ohne Klasse machen
würde.
Ich versuch es einfach mal mir D3DXCreateTextureFromFileInMemoryEx, wenn das
Problem weiterhin besteht, melde ich mich einfach wieder.

Edit:

Mit D3DXCreateTextureFromFileInMemoryEx bekomme ich D3DERR_INVALIDCALL.
Ich vermute mal der Pfad ist ungueltig?
Omdi is offline  
Old 11/15/2011, 14:49   #11
 
elite*gold: 0
Join Date: May 2010
Posts: 3,334
Received Thanks: 6,127
Vllt liegt es auch an der statischen Lib, die du gemacht hast ô_O
Xyooz is offline  
Old 11/15/2011, 15:02   #12





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
Mir ist heute aufgefallen, dass es jetzt geht.
Aber nur auf meinem anderen Computer (Windows 7 64-Bit), und bei meinem anderen nicht
(WIndows 7 32-Bit).Woran kann das liegen?
Und wie Support schon sagte, ich habe mir eine statische lib gemacht, kann das daran liegen?
Omdi is offline  
Old 11/15/2011, 15:54   #13


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
Nein, was soll die damit zu tun haben?

Hast du die richtigen redistributables im Dll Ordner?

Vielleicht liegts am DX Driver.
MrSm!th is offline  
Old 11/15/2011, 19:03   #14





 
Omdi's Avatar
 
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
Welche redistributables ;O?

Edit : Ok, mit einer exe funktioniert es, aber wieso mit einer dll nicht ?

Ich hab die Lösung gefunden, das Bild musste im Spiel-Ordner sein und
nicht im Dll-Ordner ;>
Omdi is offline  
Old 11/15/2011, 21:06   #15


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
Die d3dx9_XX.dll.

Alles klar. Joa, ich pack solche wichtigen Dateien bei Tests (bei denen die Dll nicht im Game Ordner ist) immer in alle notwendigen Ordner :P
MrSm!th is offline  
Reply




All times are GMT +1. The time now is 11:43.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.