I
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.