Ist dieser DLL source code okay?
-
Also ich hab mir echt mühe gegeben, aber es ist schon verdammt spät, grins.
Wäre schön, wenn sich den jemand anschauen kann, zum compilieren noch zu früh, dazu fehlt noch zuviel, aber ob der code syntaktisch schonmal in ordnung geht, würde mich interessieren.fix.h
#ifdef _EXPORTS #define EXPORT_API __declspec( dllexport ) #else #define EXPORT_API __declspec( dllimport ) #endif #define FIXCALL _stdcall #define FI_AUTOFLAGS -1 EXPORT_API int fInitDraw(int reserved = 0); EXPORT_API int fDeinitDraw(); EXPORT_API int fStartDraw(); EXPORT_API int fEndDraw(); EXPORT_API int fDrawImage(int image, int f, int y, int frame); EXPORT_API int fLoadImage(const char* fileName, int textureFlags = 0, int imageFlags = FI_AUTOFLAGS);fix.cpp
# include "fix.h" using namespace std; AttachProcess( int (FIXCALL*pInitDraw)(int Direct3DDevice9, int reserved); int (FIXCALL*pDeinitDraw)(); int (FIXCALL*pStartDraw)(); int (FIXCALL*pEndDraw)(); int (FIXCALL*pCreateImageEx)(void* texures, int width, int height, int flags); struct sFI_Surfaces; hLib = LoadLibrary("FastImageXors.dll"); pInitDraw = GetProcAddress(hLib, "InitDraw_"); pDeinitDraw = GetProcAddress(hLib, "DeinitDraw_"); pStartDraw = GetProcAddress(hLib, "StartDraw_"); pEndDraw = GetProcAddress(hLib, "EndDraw_"); pCreateImageEx = GetProcAddress(hLib, "CreateImageEx_"); ) struct sFI_Surfaces { int Count; int* Array; int Texture; } int CreateImage(int texture, int width, int height, int imageFlags) { if (texture) { int Array[256]; sFI_Surfaces surf; surf.Texture = texture; surf.Array = Array; surf.Count = xGetTextureFrames(texture); if (surf.Count>0) { if (surf.Count>256) surf.Count=256; for(register int i=0; i<surf.Count; i++) { surf.Array[i] = xGetTextureSurface(texture, i); } return(pCreateImageEx(&surf, width, height, imageFlags)); } } return(0); } EXPORT_API int fInitDraw() { return( pInitDraw(xGetDevice(), 0) ); } EXPORT_API int fDeinitDraw() { return pDeinitDraw(); } EXPORT_API int fStartDraw() { return pStartDraw(); } EXPORT_API int fEndDraw() { return pEndDraw(); } EXPORT_API int fLoadImage(const char* fileName, int textureFlags, int imageFlags) { if (ImageInfo_ReadFile(fileName)) { return( CreateImage(xLoadTexture(fileName, textureFlags), ImgInfo.Width, ImgInfo.Height, imageFlags) ); } return(0); } EXPORT_API int fDrawImage(int image, int x, int y, int frame = 0) { return( pDrawImageEx(image, x, y, frame) ); }ich weiß, fehlt noch detachprocess.
-
Es ist zwar eine nette neuartige Idee schon mal vorbeugenderweise von Forenmitgliedern nach Fehlern suchen zu lassen, aber es fällt eben auch unter Fehler suchen lassen.
Normalerweise erkläre ich nur bei konkreten Fragen, wie etwas funktioniert, Fehler suchen muss ich selber genug. Bevor du überhaupt compiliert hast und klar ist ob du überhaupt einen Fehler hast, mach ich das bestimmt nicht.

-
Sehe ich auch so, wie Optimizier. Allerdings sieht der Code auf den ersten Blick eigl. korrekt aus..
-
das läßt mich ja schonmal hoffen.
Und ich möchte nochmal sagen, der inhalt der funktionen ist korrekt, mir geht es lediglich darum wie der code aufgeteilt ist.
vorallem Attachprocess, ob da alles drin ist, was rein muss, weil es dazu relativ wenig lektüre gibt.
-
Sorry daß ich einen doublepost machen muss, aber ich muss euch um hilfe bitten.
Habe den Dll code jetzt soweit fertig, stecken aber noch ein paar Fehler drin.
Konnte aber von 103 auf 12 Fehler reduzieren, nur daß zugegebenermaßen mit meinem wissen erstmal nicht weiterkomme.
deshalb bitte ich euch um hilfe zumindest einmal zu schauen.
(und bitte nicht wundern, wegen der verschiedenen importarten, aber um es mir leichter zu machen, habe ich versucht soviel wie möglich aus dem originalquellcode zu übernehmen.fix.h
#define EXPORT_API __declspec( dllexport ) #define FIXCALL _stdcall #define FI_AUTOFLAGS -1 #define XDECL extern "C" __declspec(dllimport) #define XCALL __stdcall typedef unsigned char BYTE; // Image type constants #define IMGTYPE_UNKNOWN 0 #define IMGTYPE_BMP 1 #define IMGTYPE_PNG 2 #define IMGTYPE_JPEG 3 #define IMGTYPE_TGA 4 #define IMGTYPE_DDS 5 #define FLAGS_COLOR 1 #define FLAGS_MIPMAPPED 8 EXPORT_API int fInitDraw(int reserved = 0); EXPORT_API int fDeinitDraw(); EXPORT_API int fStartDraw(); EXPORT_API int fEndDraw(); EXPORT_API int fDrawImage(int image, int f, int y, int frame); EXPORT_API int fLoadImage(const char* fileName, int textureFlags = 0, int imageFlags = FI_AUTOFLAGS); int pDrawImageEx(int image, int x, int y, int frame); int pInitDraw(int Direct3DDevice9, int reserved); int pDeinitDraw(); int pStartDraw(); int pEndDraw(); int pCreateImageEx(void* texures, int width, int height, int flags); int xfLoadTexture(const char * path, int flags = FLAGS_COLOR | FLAGS_MIPMAPPED); int xfGetTextureFrames (int texture); int xfGetTextureSurface (int texture, int frame); int xfGetDevice (); int ImageInfo_ReadFile(const char* filename); struct sFI_Surfaces { int Count; int* Array; int Texture; }fix.cpp
#include <cstdio> #include "fix.h" using namespace std; BOOL APIENTRY DllMain(HINSTANCE hInstance,DWORD fwdReason, LPVOID lpvReserved) { switch(fwdReason) { case DLL_PROCESS_ATTACH: int (FIXCALL*pInitDraw)(int Direct3DDevice9, int reserved); int (FIXCALL*pDeinitDraw)(); int (FIXCALL*pStartDraw)(); int (FIXCALL*pEndDraw)(); int (FIXCALL*pCreateImageEx)(void* texures, int width, int height, int flags); int (FIXCALL*pDrawImageEx)(int image, int x, int y, int frame); struct sFI_Surfaces; struct sImageInfo; hLib = LoadLibrary("FastImageXors.dll"); hxLib = LoadLibrary("Xors3D.dll"); pInitDraw = GetProcAddress(hLib, "InitDraw_"); pDeinitDraw = GetProcAddress(hLib, "DeinitDraw_"); pStartDraw = GetProcAddress(hLib, "StartDraw_"); pEndDraw = GetProcAddress(hLib, "EndDraw_"); pCreateImageEx = GetProcAddress(hLib, "CreateImageEx_"); pDrawImageEx = GetProcAddress(hLib, "DrawImageEx_"); XDECL int XCALL xfLoadTexture(const char * path, int flags = FLAGS_COLOR | FLAGS_MIPMAPPED); XDECL int XCALL xfGetTextureFrames (int texture); XDECL int XCALL xfGetTextureSurface (int texture, int frame); XDECL int XCALL xfGetDevice (); xfGetTextureFrames = GetProcAddress(hxLib, "_xGetTextureFrames@4"); xfGetTextureSurface = GetProcAddress(hxLib, "_xGetTextureSurface@8"); xfLoadTexture = GetProcAddress(hxLib, "_xLoadTexture@8"); xfGetDevice = GetProcAdress(hxLib, "_xGetDevice@0"); int CreateImage(int texture, int width, int height, int imageFlags); break; case DLL_PROCESS_DETACH: FreeLibrary(hLib); FreeLibrary(hxLib); break; } return(TRUE); } // ImageInfo struct struct sImageInfo { int Type,Width,Height,Depth; } ImgInfo; int CreateImage(int texture, int width, int height, int imageFlags) { if (texture) { int Array[256]; sFI_Surfaces surf; surf.Texture = texture; surf.Array = Array; surf.Count = xfGetTextureFrames(texture); if (surf.Count>0) { if (surf.Count>256) surf.Count=256; for(register int i=0; i<surf.Count; i++) { surf.Array[i] = xfGetTextureSurface(texture, i); } return(pCreateImageEx(&surf, width, height, imageFlags)); } } return(0); } EXPORT_API int fInitDraw() { return( pInitDraw(xfGetDevice(), 0) ); } EXPORT_API int fDeinitDraw() { return pDeinitDraw(); } EXPORT_API int fStartDraw() { return pStartDraw(); } EXPORT_API int fEndDraw() { return pEndDraw(); } EXPORT_API int fLoadImage(const char* fileName, int textureFlags, int imageFlags) { if (ImageInfo_ReadFile(fileName)) { return( CreateImage(xfLoadTexture(fileName, textureFlags), ImgInfo.Width, ImgInfo.Height, imageFlags) ); } return(0); } EXPORT_API int fDrawImage(int image, int x, int y, int frame = 0) { return( pDrawImageEx(image, x, y, frame) ); } // GetImageInfo bool ImageInfo_ReadPNG(FILE * pFile, int FileSize) { if (FileSize<25) return(false); ImgInfo.Type = IMGTYPE_PNG; fseek(pFile, 24, SEEK_SET); int depth = fgetc(pFile); int type = fgetc(pFile); switch (type) { case 0: /* Grayscale */ ImgInfo.Depth = depth; break; case 2: /* RGB */ ImgInfo.Depth = depth * 3; break; case 3: /* Palette based */ ImgInfo.Depth = 8; break; case 4: /* Grayscale with alpha */ ImgInfo.Depth = depth * 2; break; case 6: /* RGB with alpha */ ImgInfo.Depth = depth * 4; break; default: ImgInfo.Type = IMGTYPE_UNKNOWN; return(false); break; } BYTE data[4]; fseek(pFile, 16, SEEK_SET); fread(data,1,4,pFile); ImgInfo.Width = ((int)data[0]<<24)|((int)data[1]<<16)|((int)data[2]<<8)|data[3]; fseek(pFile, 20, SEEK_SET); fread(data,1,4,pFile); ImgInfo.Height = ((int)data[0]<<24)|((int)data[1]<<16)|((int)data[2]<<8)|data[3]; return(true); } bool ImageInfo_ReadBMP(FILE * pFile, int FileSize) { if (FileSize<29) return(false); BYTE data[2]; ImgInfo.Type = IMGTYPE_BMP; /* Øèðèíà èçîáðàæåíèÿ */ fseek(pFile, 18, SEEK_SET); fread(data,1,2,pFile); ImgInfo.Width = ((int)data[1]<<8)|data[0]; /* Âûñîòà èçîáðàæåíèÿ */ fseek(pFile, 22, SEEK_SET); fread(data,1,2,pFile); ImgInfo.Height = ((int)data[1]<<8)|data[0]; /* Ãëóáèíà öâåòà */ fseek(pFile, 28, SEEK_SET); ImgInfo.Depth = fgetc(pFile); return(true); } bool ImageInfo_ReadDDS(FILE * pFile, int FileSize) { if (FileSize<28) return(false); BYTE data[16]; ImgInfo.Type = IMGTYPE_DDS; fseek(pFile, 12, SEEK_SET); fread(data,1,16,pFile); /* Øèðèíà èçîáðàæåíèÿ */ ImgInfo.Width = ((int)data[3]<<24)|((int)data[2]<<16)|((int)data[1]<<8)|data[0]; /* Âûñîòà èçîáðàæåíèÿ */ ImgInfo.Height = ((int)data[7]<<24)|((int)data[6]<<16)|((int)data[5]<<8)|data[4]; /* Ãëóáèíà öâåòà */ ImgInfo.Depth = ((int)data[15]<<24)|((int)data[14]<<16)|((int)data[13]<<8)|data[12]; return(true); } bool ImageInfo_ReadTGA(FILE * pFile, int FileSize) { if (FileSize<18) return(false); BYTE data[6]; ImgInfo.Type = IMGTYPE_TGA; fseek(pFile, 12, SEEK_SET); fread(data,1,6,pFile); /* Øèðèíà èçîáðàæåíèÿ */ ImgInfo.Width = ((int)data[1]<<8)|data[0]; /* Âûñîòà èçîáðàæåíèÿ */ ImgInfo.Height = ((int)data[3]<<8)|data[2]; /* Ãëóáèíà öâåòà */ ImgInfo.Depth = ((int)data[5]<<8)|data[4]; return(true); } bool ImageInfo_ReadJPEG(FILE * pFile, int FileSize) { BYTE data[5]; int seek = 0; bool ok = false; /* Ïîèñê íà÷àëà ôàéëà */ while (seek < FileSize-4) { fseek(pFile, seek, SEEK_SET); fread(data,1,4,pFile); if (data[0]==0xFF && data[1]==0xD8 && data[2]==0xFF && data[3]==0xE0) { ok = true; break; } seek++; } if (!ok) return(false); fseek(pFile, seek+4, SEEK_SET); fread(data,1,2,pFile); seek += 4 + ((int)data[0]<<8)|data[1]; fseek(pFile, seek, SEEK_SET); /* Èùåì ñåãìåíò SOF0 */ ok = false; int mark,type; while ((mark=fgetc(pFile)) != -1) { if (mark == 0xFF) { type = fgetc(pFile); if(0xC0<=type && type<=0xC3) { fseek(pFile, ftell(pFile)+3, SEEK_SET); fread(data,1,5,pFile); ImgInfo.Height = ((int)data[0]<<8)|data[1]; ImgInfo.Width = ((int)data[2]<<8)|data[3]; ImgInfo.Depth = data[4] * 8; ImgInfo.Type = IMGTYPE_JPEG; return(true); } seek = ftell(pFile); fseek(pFile, seek, SEEK_SET); fread(data,1,2,pFile); seek += ((int)data[0]<<8)|data[1]; fseek(pFile, seek, SEEK_SET); } } return(false); } int ImageInfo_ReadFile(const char* filename) { FILE * pFile; long size; ImgInfo.Type = IMGTYPE_UNKNOWN; ImgInfo.Width = 0; ImgInfo.Height = 0; ImgInfo.Depth = 0; /* Îòêðûâàåì ôàéë */ fopen_s (&pFile,filename,"rb"); if (pFile == NULL) return 0; /* Ðàçìåð ôàéëà */ fseek(pFile, 0, SEEK_END); size = ftell(pFile); if (size < 3) { fclose(pFile); return 0; } fseek(pFile, 0, SEEK_SET); BYTE data[4]; bool ImgOk = false; /* Start comparsion */ fread(data,1,4,pFile); /* Check PNG */ if (data[0]==137 && data[1]==80 && data[2]==78) { ImgOk = ImageInfo_ReadPNG(pFile,size); } /* Check BMP */ if (ImgOk==false && data[0]==66 && data[1]==77) { ImgOk = ImageInfo_ReadBMP(pFile,size); } /* Check DDS */ if (ImgOk==false && data[0]==68 && data[1]==68 && data[2]==83 && data[3]==32) { ImgOk = ImageInfo_ReadDDS(pFile,size); } /* Check TGA */ if (ImgOk==false && data[0]==0 && data[1]==0 && data[2]==2) { ImgOk = ImageInfo_ReadTGA(pFile,size); } /* Check JPEG */ if (ImgOk==false) ImgOk = ImageInfo_ReadJPEG(pFile,size); fclose(pFile); return(ImgOk); }
-
Und die 12 Fehler wären??
-
oh sorry....war schon spät...
waren doch nur elf fehler...
1>f:\save\fi_update\fi_update\fi_x\fix.cpp(5) : error C2143: Syntaxfehler: Es fehlt ';' vor 'using' 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'APIENTRY' 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'DllMain' 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2065: 'HINSTANCE': nichtdeklarierter Bezeichner 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'hInstance' 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2059: Syntaxfehler: ')' 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2143: Syntaxfehler: Es fehlt ';' vor '{' 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(8) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
-
Wie der Kompiler sagt. Es fehlt ein ; vor dem using.
Vor dem using steht #include "fix.h"
und in fix.h finde ich ein struct ohne ; am Ende.Simon
-
ah stimmt....falsche denkweise....direkt davor kommt ja kein ;
hatte ich total übersehen, jetzt sind nur noch 10 fehler....
-
Sieht ganz so aus, als hättest du <windows.h> nicht inkludiert...
-
stimmt, hab ich jetzt gemacht.....
so ich hab jetzt einiges verändert, hurra, nur noch 7 fehler....
da brauch ich aber hilfe...(www.xors3d.de/dls/fi_update.zip)
fix.h#define EXPORT_API __declspec( dllexport ) #define FIXCALL _stdcall #define FI_AUTOFLAGS -1 typedef unsigned char BYTE; // Image type constants #define IMGTYPE_UNKNOWN 0 #define IMGTYPE_BMP 1 #define IMGTYPE_PNG 2 #define IMGTYPE_JPEG 3 #define IMGTYPE_TGA 4 #define IMGTYPE_DDS 5 #define FLAGS_COLOR 1 #define FLAGS_MIPMAPPED 8 EXPORT_API int fInitDraw(int reserved = 0); EXPORT_API int fDeinitDraw(); EXPORT_API int fStartDraw(); EXPORT_API int fEndDraw(); EXPORT_API int fDrawImage(int image, int f, int y, int frame); EXPORT_API int fLoadImage(const char* fileName, int textureFlags = 0, int imageFlags = FI_AUTOFLAGS); int pDrawImageEx(int image, int x, int y, int frame); int pInitDraw(int Direct3DDevice9, int reserved); int pDeinitDraw(); int pStartDraw(); int pEndDraw(); int pCreateImageEx(void* texures, int width, int height, int flags); int xfLoadTexture(const char * path, int flags = FLAGS_COLOR | FLAGS_MIPMAPPED); int xfGetTextureFrames (int texture); int xfGetTextureSurface (int texture, int frame); int xfGetDevice (); int ImageInfo_ReadFile(const char* filename); struct sFI_Surfaces { int Count; int* Array; int Texture; } ;fix.cpp
#include "windows.h" #include <cstdio> #include "fix.h" using namespace std; BOOL APIENTRY DllMain(HINSTANCE hInstance,DWORD fwdReason, LPVOID lpvReserved) { HMODULE hLib; HMODULE hxLib; switch(fwdReason) { case DLL_PROCESS_ATTACH: int (FIXCALL*pInitDraw)(int Direct3DDevice9, int reserved); int (FIXCALL*pDeinitDraw)(); int (FIXCALL*pStartDraw)(); int (FIXCALL*pEndDraw)(); int (FIXCALL*pCreateImageEx)(void* texures, int width, int height, int flags); int (FIXCALL*pDrawImageEx)(int image, int x, int y, int frame); struct sFI_Surfaces; struct sImageInfo; hLib = LoadLibrary("FastImageXors.dll"); hxLib = LoadLibrary("Xors3D.dll"); (FARPROC &)pInitDraw = GetProcAddress(hLib, "InitDraw_"); (FARPROC &)pDeinitDraw = GetProcAddress(hLib, "DeinitDraw_"); (FARPROC &)pStartDraw = GetProcAddress(hLib, "StartDraw_"); (FARPROC &)pEndDraw = GetProcAddress(hLib, "EndDraw_"); (FARPROC &)pCreateImageEx = GetProcAddress(hLib, "CreateImageEx_"); (FARPROC &)pDrawImageEx = GetProcAddress(hLib, "DrawImageEx_"); int (FIXCALL*xfLoadTexture)(const char * path, int flags = FLAGS_COLOR | FLAGS_MIPMAPPED); int (FIXCALL*xfGetTextureFrames) (int texture); int (FIXCALL*xfGetTextureSurface) (int texture, int frame); int (FIXCALL*xfGetDevice) (); xfGetTextureFrames = GetProcAddress(hxLib, "_xGetTextureFrames@4"); xfGetTextureSurface = GetProcAddress(hxLib, "_xGetTextureSurface@8"); xfLoadTexture = GetProcAddress(hxLib, "_xLoadTexture@8"); xfGetDevice = GetProcAdress(hxLib, "_xGetDevice@0"); int CreateImage(int texture, int width, int height, int imageFlags); break; case DLL_PROCESS_DETACH: FreeLibrary(hLib); FreeLibrary(hxLib); break; } return(TRUE); } // ImageInfo struct struct sImageInfo { int Type,Width,Height,Depth; } ImgInfo; int CreateImage(int texture, int width, int height, int imageFlags) { if (texture) { int Array[256]; sFI_Surfaces surf; surf.Texture = texture; surf.Array = Array; surf.Count = xfGetTextureFrames(texture); if (surf.Count>0) { if (surf.Count>256) surf.Count=256; for(register int i=0; i<surf.Count; i++) { surf.Array[i] = xfGetTextureSurface(texture, i); } return(pCreateImageEx(&surf, width, height, imageFlags)); } } return(0); } EXPORT_API int fInitDraw() { return( pInitDraw(xfGetDevice(), 0) ); } EXPORT_API int fDeinitDraw() { return pDeinitDraw(); } EXPORT_API int fStartDraw() { return pStartDraw(); } EXPORT_API int fEndDraw() { return pEndDraw(); } EXPORT_API int fLoadImage(const char* fileName, int textureFlags, int imageFlags) { if (ImageInfo_ReadFile(fileName)) { return( CreateImage(xfLoadTexture(fileName, textureFlags), ImgInfo.Width, ImgInfo.Height, imageFlags) ); } return(0); } EXPORT_API int fDrawImage(int image, int x, int y, int frame = 0) { return( pDrawImageEx(image, x, y, frame) ); } // GetImageInfo bool ImageInfo_ReadPNG(FILE * pFile, int FileSize) { if (FileSize<25) return(false); ImgInfo.Type = IMGTYPE_PNG; fseek(pFile, 24, SEEK_SET); int depth = fgetc(pFile); int type = fgetc(pFile); switch (type) { case 0: /* Grayscale */ ImgInfo.Depth = depth; break; case 2: /* RGB */ ImgInfo.Depth = depth * 3; break; case 3: /* Palette based */ ImgInfo.Depth = 8; break; case 4: /* Grayscale with alpha */ ImgInfo.Depth = depth * 2; break; case 6: /* RGB with alpha */ ImgInfo.Depth = depth * 4; break; default: ImgInfo.Type = IMGTYPE_UNKNOWN; return(false); break; } BYTE data[4]; fseek(pFile, 16, SEEK_SET); fread(data,1,4,pFile); ImgInfo.Width = ((int)data[0]<<24)|((int)data[1]<<16)|((int)data[2]<<8)|data[3]; fseek(pFile, 20, SEEK_SET); fread(data,1,4,pFile); ImgInfo.Height = ((int)data[0]<<24)|((int)data[1]<<16)|((int)data[2]<<8)|data[3]; return(true); } bool ImageInfo_ReadBMP(FILE * pFile, int FileSize) { if (FileSize<29) return(false); BYTE data[2]; ImgInfo.Type = IMGTYPE_BMP; /* Øèðèíà èçîáðàæåíèÿ */ fseek(pFile, 18, SEEK_SET); fread(data,1,2,pFile); ImgInfo.Width = ((int)data[1]<<8)|data[0]; /* Âûñîòà èçîáðàæåíèÿ */ fseek(pFile, 22, SEEK_SET); fread(data,1,2,pFile); ImgInfo.Height = ((int)data[1]<<8)|data[0]; /* Ãëóáèíà öâåòà */ fseek(pFile, 28, SEEK_SET); ImgInfo.Depth = fgetc(pFile); return(true); } bool ImageInfo_ReadDDS(FILE * pFile, int FileSize) { if (FileSize<28) return(false); BYTE data[16]; ImgInfo.Type = IMGTYPE_DDS; fseek(pFile, 12, SEEK_SET); fread(data,1,16,pFile); /* Øèðèíà èçîáðàæåíèÿ */ ImgInfo.Width = ((int)data[3]<<24)|((int)data[2]<<16)|((int)data[1]<<8)|data[0]; /* Âûñîòà èçîáðàæåíèÿ */ ImgInfo.Height = ((int)data[7]<<24)|((int)data[6]<<16)|((int)data[5]<<8)|data[4]; /* Ãëóáèíà öâåòà */ ImgInfo.Depth = ((int)data[15]<<24)|((int)data[14]<<16)|((int)data[13]<<8)|data[12]; return(true); } bool ImageInfo_ReadTGA(FILE * pFile, int FileSize) { if (FileSize<18) return(false); BYTE data[6]; ImgInfo.Type = IMGTYPE_TGA; fseek(pFile, 12, SEEK_SET); fread(data,1,6,pFile); /* Øèðèíà èçîáðàæåíèÿ */ ImgInfo.Width = ((int)data[1]<<8)|data[0]; /* Âûñîòà èçîáðàæåíèÿ */ ImgInfo.Height = ((int)data[3]<<8)|data[2]; /* Ãëóáèíà öâåòà */ ImgInfo.Depth = ((int)data[5]<<8)|data[4]; return(true); } bool ImageInfo_ReadJPEG(FILE * pFile, int FileSize) { BYTE data[5]; int seek = 0; bool ok = false; /* Ïîèñê íà÷àëà ôàéëà */ while (seek < FileSize-4) { fseek(pFile, seek, SEEK_SET); fread(data,1,4,pFile); if (data[0]==0xFF && data[1]==0xD8 && data[2]==0xFF && data[3]==0xE0) { ok = true; break; } seek++; } if (!ok) return(false); fseek(pFile, seek+4, SEEK_SET); fread(data,1,2,pFile); seek += 4 + ((int)data[0]<<8)|data[1]; fseek(pFile, seek, SEEK_SET); /* Èùåì ñåãìåíò SOF0 */ ok = false; int mark,type; while ((mark=fgetc(pFile)) != -1) { if (mark == 0xFF) { type = fgetc(pFile); if(0xC0<=type && type<=0xC3) { fseek(pFile, ftell(pFile)+3, SEEK_SET); fread(data,1,5,pFile); ImgInfo.Height = ((int)data[0]<<8)|data[1]; ImgInfo.Width = ((int)data[2]<<8)|data[3]; ImgInfo.Depth = data[4] * 8; ImgInfo.Type = IMGTYPE_JPEG; return(true); } seek = ftell(pFile); fseek(pFile, seek, SEEK_SET); fread(data,1,2,pFile); seek += ((int)data[0]<<8)|data[1]; fseek(pFile, seek, SEEK_SET); } } return(false); } int ImageInfo_ReadFile(const char* filename) { FILE * pFile; long size; ImgInfo.Type = IMGTYPE_UNKNOWN; ImgInfo.Width = 0; ImgInfo.Height = 0; ImgInfo.Depth = 0; /* Îòêðûâàåì ôàéë */ fopen_s (&pFile,filename,"rb"); if (pFile == NULL) return 0; /* Ðàçìåð ôàéëà */ fseek(pFile, 0, SEEK_END); size = ftell(pFile); if (size < 3) { fclose(pFile); return 0; } fseek(pFile, 0, SEEK_SET); BYTE data[4]; bool ImgOk = false; /* Start comparsion */ fread(data,1,4,pFile); /* Check PNG */ if (data[0]==137 && data[1]==80 && data[2]==78) { ImgOk = ImageInfo_ReadPNG(pFile,size); } /* Check BMP */ if (ImgOk==false && data[0]==66 && data[1]==77) { ImgOk = ImageInfo_ReadBMP(pFile,size); } /* Check DDS */ if (ImgOk==false && data[0]==68 && data[1]==68 && data[2]==83 && data[3]==32) { ImgOk = ImageInfo_ReadDDS(pFile,size); } /* Check TGA */ if (ImgOk==false && data[0]==0 && data[1]==0 && data[2]==2) { ImgOk = ImageInfo_ReadTGA(pFile,size); } /* Check JPEG */ if (ImgOk==false) ImgOk = ImageInfo_ReadJPEG(pFile,size); fclose(pFile); return(ImgOk); }fehler:
1>fix.cpp 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(22) : error C2664: 'LoadLibraryW': Konvertierung des Parameters 1 von 'const char [18]' in 'LPCWSTR' nicht möglich 1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(23) : error C2664: 'LoadLibraryW': Konvertierung des Parameters 1 von 'const char [11]' in 'LPCWSTR' nicht möglich 1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(31) : error C2383: 'xfLoadTexture': Für dieses Symbol sind Standardargumente nicht zulässig 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(35) : error C2440: '=': 'FARPROC' kann nicht in 'int (__stdcall *)(int)' konvertiert werden 1> Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(36) : error C2440: '=': 'FARPROC' kann nicht in 'int (__stdcall *)(int,int)' konvertiert werden 1> Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(37) : error C2440: '=': 'FARPROC' kann nicht in 'int (__stdcall *)(const char *,int)' konvertiert werden 1> Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat 1>f:\save\fi_update\fi_update\fi_x\fix.cpp(38) : error C3861: "GetProcAdress": Bezeichner wurde nicht gefunden.