BCB 6 - Include Fehler

contains all delphi packages mentioned below
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

BCB 6 - Include Fehler

Post by djdaple »

Hi madshi,

hoffe, es ist ok wenn ich hier in Deutsch schreibe ^^.

Also ich habe mir die aktuelle Version der madCollection gezogen und madbasic und madcodehook installiert (währeddessen bcb6 geschlossen!) danach habe ich ein neues DLL-Projekt mit dem DLL-Assistenten erstellt und versucht

Code: Select all

#include "madCHook.h"

Code: Select all

#include "madCodeHook.h"

Code: Select all

#include "madCHook.hpp"

Code: Select all

#include "madCodeHook.hpp"
ihrgendwie zu include aber er sagt immer, dass er die datei nicht findet.

Mal in die installierten Packages geschaut.

Folgende sind installiert:

madBasic
MadDisAsm
MadHelp

aber nicht MadCodeHook oder MadCHook

habe bereits 3 mal neu installiert.

dann habe ich erst das Package madRemote_.bpl und dann madCodeHook_.bpl manuell hinzugefügt.

Aber er findet keine der Headerdateien, wie oben beschrieben. :?

Suche soetwas für BCB6 schon seit Monaten ;D währe dir sehr Dankbar, wenn du mir helfen könntest!

Gruß dj
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Und noch eine Frage ^^

http://www.c-plusplus.de/forum/viewtopic.php?t=39145

ist das nicht das gleiche wie das, was man mit madCodeHook machen kann?

Nur ohne injection, also kann man doch das direct3d example übernehmen oder?

War nicht früher mal ein DirectDraw example dabei?

Danke :)
madshi
Site Admin
Posts: 10754
Joined: Sun Mar 21, 2004 5:25 pm

Post by madshi »

Komische Sache. Prüf doch mal bitte, was für Include-/Library-Pfade in Deinem Projekt eingetragen sind. Notfalls trage dort bitte die fehlenden Pfade für madCodeHook nach. Ich nehme an, daß dort einfach Pfade fehlen.

Das Projekt aus dem Link benutzt SetWindowsHookEx. Das ist durchaus keine schlechte Lösung, aber es ist nicht "das gleiche" wie das was madCodeHook macht. SetWindowsHookEx ist für das Hooken von Messages, Maus und Tastatur gedacht. madCodeHook ist für das Hooken von APIs gedacht. Das sind zwei eigentlich völlig unterschiedliche Sachen. Man kann SetWindowsHookEx auch zum Injecten von DLLs "mißbrauchen", aber das injected nur in GUI-Prozesse, während madCodeHook in alle Prozesse injected. Außerdem ist madCodeHook's Injection laut Aussage eines meiner Kunden für ihn stabiler und verläßlicher gewesen als SetWindowsHookEx.

Es gab früher mal ein DirectDraw Example, glaube ich. Aber das habe ich abgelöst durch das Direct3D Example, weil heutzutage kaum noch jemand DirectDraw verwendet.
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Soo habe jetzt alles eingebunden aber leider kommen diese Fehlermeldungen sonst findet er alles!

Code: Select all

Build
  [C++ Warning] dxdll.cpp(53): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookCode(void *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(64): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookCode(void *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(72): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookAPI(char *,char *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(95): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookCode(void *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(105): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookCode(void *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(111): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookAPI(char *,char *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(134): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookCode(void *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(144): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookCode(void *,void *,void * &,unsigned int)'
  [C++ Warning] dxdll.cpp(150): W8030 Temporary used for parameter 'nextHook' in call to '__stdcall HookAPI(char *,char *,void *,void * &,unsigned int)'
  [C++ Error] dxdll.cpp(159): E2268 Call to undefined function 'InitializeMadCHook'
  [C++ Error] dxdll.cpp(167): E2268 Call to undefined function 'FinalizeMadCHook'
Danke für die Hilfe :D
madshi
Site Admin
Posts: 10754
Joined: Sun Mar 21, 2004 5:25 pm

Post by madshi »

Schmeiß einfach Initialize/FinalizeMadCHook raus. Diese Aufrufe sind nur für MSVC++-Programmierer.

Wo die Warnungen her kommen, kann ich nicht genau sagen. Bin nicht wirklich so der riesige C++-Fachmann. Ich vermute, daß MSVC++ eine leicht andere Syntax haben will als BCB. Mußt einfach mal ein bißchen an der Syntax der Parameter-Übergabe beim Aufruf von HookCode/HookAPI rumspielen, vielleicht kriegst Du dann die Warnungen weg.
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Hey danke hab eben dein comment gelesen (FinalizeMadCHook is needed only if you're using the static madCHook.lib) ^^

Aber :( leider kommt jetzt :( :

Code: Select all

[Linker Fatal Error] Fatal: Unable to open file 'MADDISASM.OBJ'
Also das verstehe ich jetzt absolut nicht mehr ich schaue nochmal ob ich auch den disasm eingebunden habe...
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Na habe alles drinnen Warnungen kommen auch nicht mehr...

die warnungen sind von den packages gekommen die habe ich dann einfach wieder herausgenommen!

MADDISASM.OBJ findet er immer noch nicht :

[Linker Fatal Error] Fatal: Unable to open file 'MADDISASM.OBJ'

Das einzigste Problem! ^^
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Na toll jetzt kommt nur noch

Code: Select all

[Linker Fatal Error] Fatal: Unable to open file 'MADCODEHOOK_.BPI'
!?!?!?! hmm

ich brauche doch keine packages, wenn ich doch bcb6 eingebunden habe oder?
madshi
Site Admin
Posts: 10754
Joined: Sun Mar 21, 2004 5:25 pm

Post by madshi »

Die Pfade müssen aber trotzdem stimmen, denke ich. Prüf nochmal die Pfade nach. Der Pfad, wo die MadCodeHook_.lib drin ist, muß BCB bekannt sein.

Es kann auch sein, daß BCB sich noch gemerkt hat, daß Du die Packages mal drin hattest. Manchmal ist BCB da ziemlich doof, hat ein Elefantengedächtnis. Versuch's am besten nochmal mit einem ganz neuen Projekt.

<seufz> Eigentlich sollte es alles nicht so kompliziert sein! BCB ist nur manchmal echt etwas blöd. Mit Delphi geht da aus meiner Komponenten-Entwicklungs-Sicht vieles leichter. Glücklicherweise hat Borland da bei der C++-Personality von BDS2006 gut nachgebessert.
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

sooo ES GEHT! habe einfach die lib nocheinmal direkt ins projekt eingefügt!

Aber in games wird immer noch kein wireframe modus dargestellt :(
madshi
Site Admin
Posts: 10754
Joined: Sun Mar 21, 2004 5:25 pm

Post by madshi »

Wenn Du die nicht-kommerzielle Version von madCodeHook verwendest, mußt Du die madCHook.dll noch in Deinen Projekt-Ordner kopieren.
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Also!

Die gute Nachricht:

Es hat Funktioniert!


Die schelchte:

Immer wenn ich eine DXAnwendung starte, wenn die dll gehookt ist, kommen Fehler und die Anwendung stürtzt ab.

Am besten beschreibt dies VC:

vietcong.exe:

An exception during DllEntryPoint or DllMain in Module:
c:\...\...\...\dxdll.dll

Also habe ich da wohl was falsch gehookt, obwohl alles wie im beispiel ist!!!
madshi
Site Admin
Posts: 10754
Joined: Sun Mar 21, 2004 5:25 pm

Post by madshi »

Hast Du irgendwas an dem Hook-DLL geändert oder hast Du es nur einfach neu kompiliert? Klappt denn das von mir schon vorkompilierte DLL ohne Abstürze?
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

Mit der vorkompilierten dll geht alles wunderbar!

Wenn ich jetzt die selbstkompilierte benutze, dannertönt zwar ein beep

Code: Select all

 
HookDirect3D8();
MessageBeep(0);
aber hier

Code: Select all

BOOL HookDirect3D8()
{
MessageBeep(0); // hier beept es noch
  return HookAPI("d3d8.dll", "Direct3DCreate8", Direct3DCreate8Callback, (PVOID*) &Direct3DCreate8Next);
MessageBeep(0); // hier nicht mehr, sicher normal, da nach return!
}

Code: Select all

PVOID WINAPI Direct3DCreate8Callback(DWORD sdkVersion)
{
MessageBeep(0); // hier beept es noch
  PVOID result = Direct3DCreate8Next(sdkVersion);
  if ( result && !CreateDevice8Next )
    HookCode(GetInterfaceMethod(result, 15), CreateDevice8Callback, (PVOID*) &CreateDevice8Next);
MessageBeep(0); // hier nicht mehr
    return result;

}

Code: Select all

HRESULT WINAPI CreateDevice8Callback(PVOID self, DWORD adapter, DWORD devType, HWND wnd, DWORD flags, PVOID params, PVOID* device)
{
  HRESULT result = CreateDevice8Next(self, adapter, devType, wnd, flags, params, device);
  if ( !result && device && *device && !SetRenderState8Next ) {
    HookCode(GetInterfaceMethod(*device, 50), SetRenderState8Callback, (PVOID*) &SetRenderState8Next);
    SetRenderState8Next(*device, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
  }
 MessageBeep(0); // hier auch nicht mehr
  return result;
}
also da ist der wurm drinnen!!! Das beispiel funktioniert (vorkompilierte HookDirect3D.dll) ist auch +-5 kb genau so groß!

Die directxanwendung hängt sich auf an dem punkt wo es nicht mehr beept und beendet sich nach 5 sekunden (währenddessen 99 % cpu)

wo ist der fehler? im beispiel funktionierts :(
djdaple
Posts: 19
Joined: Thu Dec 29, 2005 6:52 am

Post by djdaple »

also im grunde will ich ja nur text in directx ausgeben, was würde mir schon reichen ^^ wireframe brauche ich nicht. wie wollen hier ja keine cheates coden ^^
Post Reply