hello i want to redirecting functions using pointers only and i get 2 errors
-
#include #include #include #include #include #include #include #include #include #include #pragma comment(lib, "glu32.lib") #pragma comment(lib, "opengl32.lib") #pragma comment(lib, "winmm.lib") #define Client_GLDRAWELEMENTS 0x4E5DA2 typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices ); DWORD g_dwGlDrawElements = NULL; void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices ) { // Here you can filter any textures using g_pszTextureName CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices ); } // Redirect bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved) { if(dwReason == DLL_PROCESS_ATTACH) { g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS; *( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook ); return true; } else if(dwReason == DLL_PROCESS_DETACH) { } return false; } Here are the errors thnx if any could help me C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2065: 'CAST' : undeclared identifier C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE'
-
#include #include #include #include #include #include #include #include #include #include #pragma comment(lib, "glu32.lib") #pragma comment(lib, "opengl32.lib") #pragma comment(lib, "winmm.lib") #define Client_GLDRAWELEMENTS 0x4E5DA2 typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices ); DWORD g_dwGlDrawElements = NULL; void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices ) { // Here you can filter any textures using g_pszTextureName CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices ); } // Redirect bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved) { if(dwReason == DLL_PROCESS_ATTACH) { g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS; *( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook ); return true; } else if(dwReason == DLL_PROCESS_DETACH) { } return false; } Here are the errors thnx if any could help me C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2065: 'CAST' : undeclared identifier C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE'
Please format your code properly using the "code block" tag and using the '<' and '>' symbols just above the emoticons. Your code is unreadable.
Cédric Moonen Software developer
Charting control [v1.5] OpenGL game tutorial in C++ -
#include #include #include #include #include #include #include #include #include #include #pragma comment(lib, "glu32.lib") #pragma comment(lib, "opengl32.lib") #pragma comment(lib, "winmm.lib") #define Client_GLDRAWELEMENTS 0x4E5DA2 typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices ); DWORD g_dwGlDrawElements = NULL; void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices ) { // Here you can filter any textures using g_pszTextureName CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices ); } // Redirect bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved) { if(dwReason == DLL_PROCESS_ATTACH) { g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS; *( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook ); return true; } else if(dwReason == DLL_PROCESS_DETACH) { } return false; } Here are the errors thnx if any could help me C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2065: 'CAST' : undeclared identifier C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE'
Try changing the glDrawElementsHook function as follows:
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *myFunc;myFunc = MessageBox; // \*\*\*\*\* Change this to reflect the name of the function you want to call \*\* (\*myFunc)(iMode, iCount, iType, pvIndices );
}
You just need to change the indicated line so it points to the correct function Here's a trivial example:
typedef int ( WINAPI msgBoxFunc_Type )( HWND hwnd, LPCSTR, LPCSTR, UINT);
void DrawOKMB( char *title, char *text )
{
msgBoxFunc_Type *myFunc;
myFunc = MessageBox;
(*myFunc)(NULL, text, title, MB_OK);
} -
Try changing the glDrawElementsHook function as follows:
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *myFunc;myFunc = MessageBox; // \*\*\*\*\* Change this to reflect the name of the function you want to call \*\* (\*myFunc)(iMode, iCount, iType, pvIndices );
}
You just need to change the indicated line so it points to the correct function Here's a trivial example:
typedef int ( WINAPI msgBoxFunc_Type )( HWND hwnd, LPCSTR, LPCSTR, UINT);
void DrawOKMB( char *title, char *text )
{
msgBoxFunc_Type *myFunc;
myFunc = MessageBox;
(*myFunc)(NULL, text, title, MB_OK);
}Thnx for very good post but still i got 1 error main.cpp C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE' it should be this i dunno why the code block ignores it includes should be stdio.h detours.h vector tlhelp32.h mmsystem.h process.h math.h
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
DWORD g_dwGlDrawElements = NULL;void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{GLDRAWELEMENTS_TYPE *CAST;
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}// Redirect
bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS;
*( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook );return true; } else if(dwReason == DLL\_PROCESS\_DETACH) { } return false;
}
-
Thnx for very good post but still i got 1 error main.cpp C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE' it should be this i dunno why the code block ignores it includes should be stdio.h detours.h vector tlhelp32.h mmsystem.h process.h math.h
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
DWORD g_dwGlDrawElements = NULL;void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{GLDRAWELEMENTS_TYPE *CAST;
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}// Redirect
bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS;
*( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook );return true; } else if(dwReason == DLL\_PROCESS\_DETACH) { } return false;
}
Ahr - that thing with the #includes being cut from the post - when you're editing the post, you have to go through and replace all instances of < & > with the characters supplied when you hit the < or > buttons below the edit box. If you don't, text between < and > will be treated as an HTML block. (not just plain text) As for the code - it's the whole CAST thing that's giving rubbish results
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *CAST;
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}Here, like this, I believe. - Just chuck the CAST away and use the function pointer like I suggested earlier.
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
} -
Ahr - that thing with the #includes being cut from the post - when you're editing the post, you have to go through and replace all instances of < & > with the characters supplied when you hit the < or > buttons below the edit box. If you don't, text between < and > will be treated as an HTML block. (not just plain text) As for the code - it's the whole CAST thing that's giving rubbish results
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *CAST;
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}Here, like this, I believe. - Just chuck the CAST away and use the function pointer like I suggested earlier.
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}It says the following error if i try above C:\Documents and Settings\ivor\Desktop\project\main.cpp(40) : error C2064: term does not evaluate to a function
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
} -
It says the following error if i try above C:\Documents and Settings\ivor\Desktop\project\main.cpp(40) : error C2064: term does not evaluate to a function
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}Ok, please forgive me - I never really had a close look at all of the code together. Have a look at the definition of g_dwGlDrawElements, it's defined as a DWORD?!? I can't see all of the code in your first post because of the issue with the < and > characters, but if you'd care to post the whole lot I'll take another look at it. I did find some code like yours, over here: http://forum.gamedeception.net/showthread.php?p=100284[^] They might be good value when it comes to looking at this problem. About 1/2 way down, somebody mentions that the code is just performing the same basic function as GetProcAddress, though their code actually overwrites pointers, etc, etc. I had immediately thought of this function when I found out your code need function pointers. It's usually a pretty neat and clean thing to do. In any case, you can chuck a zip over at savefile.com or post the whole code here and I'll take another peek.
-
Ok, please forgive me - I never really had a close look at all of the code together. Have a look at the definition of g_dwGlDrawElements, it's defined as a DWORD?!? I can't see all of the code in your first post because of the issue with the < and > characters, but if you'd care to post the whole lot I'll take another look at it. I did find some code like yours, over here: http://forum.gamedeception.net/showthread.php?p=100284[^] They might be good value when it comes to looking at this problem. About 1/2 way down, somebody mentions that the code is just performing the same basic function as GetProcAddress, though their code actually overwrites pointers, etc, etc. I had immediately thought of this function when I found out your code need function pointers. It's usually a pretty neat and clean thing to do. In any case, you can chuck a zip over at savefile.com or post the whole code here and I'll take another peek.
-
Ok i uploaded the c++ source and packed it with rar. here is the link i really appriciate if it could be start working. http://www.savefile.com/files/1793888[^]
Well here's what I've got. It compiles, but I've no idea if it's any good. It all depends on what is sitting at 0x4E5DA2 in memory.
#include <windows.h>
#include <stdio.h>
//#include <detours.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <math.h>
#include <process.h>
#include <mmsystem.h>
#include <tlhelp32.h>
#include <vector>#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
GLDRAWELEMENTS_TYPE g_dwGlDrawElements = NULL;
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( GLDRAWELEMENTS_TYPE * )Client_GLDRAWELEMENTS;
*( DWORD*)Client_GLDRAWELEMENTS = PtrToUlong(glDrawElementsHook );
return true;
}
else if(dwReason == DLL_PROCESS_DETACH)
{
}
return false;
} -
Well here's what I've got. It compiles, but I've no idea if it's any good. It all depends on what is sitting at 0x4E5DA2 in memory.
#include <windows.h>
#include <stdio.h>
//#include <detours.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <math.h>
#include <process.h>
#include <mmsystem.h>
#include <tlhelp32.h>
#include <vector>#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
GLDRAWELEMENTS_TYPE g_dwGlDrawElements = NULL;
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( GLDRAWELEMENTS_TYPE * )Client_GLDRAWELEMENTS;
*( DWORD*)Client_GLDRAWELEMENTS = PtrToUlong(glDrawElementsHook );
return true;
}
else if(dwReason == DLL_PROCESS_DETACH)
{
}
return false;
}