Mousehook



  • hi

    Klar liegt es an der Source !! Wen das Program abschmiert, ist meistens was in ein Speicherbereich kopiert worden der nicht gross genug ist. Also buffer/stack overflow oder formatstring etc... Schau mal was der Compiler sagt ! hast du Warnungen wen du compilierst? Mit hooks solltest du dich auskennen, da das zu schwerwiegenden Fehler im betrieb de OS kommen kann !

    LB



  • Hi

    So wie ich feststellen muss, gibt es immer wieder Personen die meinen sie können von einem toutorial den sourcecode übernehmen, und dan meinen es läuft alles rund. Anstat sich mit der Materie zu befassen! Dan würden auch nicht so dämliche fragen gestellt. Wer soll den das schon wissen was du für ein Problem hast. kannst nicht 300 zeilen code posten, und dan von den User hier erwarten das sie dir den Fehler suchen ! Ein bisschen eigeninitiative ist gefragt ! wen du wenigstens sagen würdest wo du den Fehler vermutest, dan wäre das etwas anderes. Und ich meine das du dich mal besser zuerst mit windows programmierung beschäftigst solltest ,anstat dich gleich mit hooks herumzuschlagen. weil so wird dir bestimmt niemand helfen.

    Cya LB



  • Hi,
    @0or1: Ok, das mit den 300 Zeilen Code ist richtig; Sorry dafür.
    Also, dann will ich es noch einmal versuchen (etwas kürzer):
    Ich übernahm den Code aus dem Tutorial und behob einen Großteil der Fehler, bis nur noch einer übrig war (und ja, ich habe mich auch mit der Materie auseinander gesetzt):

    c:\...\main.cpp(17) : error C2440: '=': 'char [8]' kann nicht in 'LPCWSTR' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Anscheinend liegt der Fehler, welcher den Programm-Absturz verursacht, hier.
    Also suchte ich im Forum eine Lösung und fand diesen Thread wo geschrieben wurde:

    windowclass.lpszClassName = szClassName;

    ...weist du einem Zeiger auf einen Unicodestring [wchar_t*] einen Ansi-String [char*] zu. In den Projekteinstellungen lässt sich die Unicodeunterstützung ein und ausstellen (Bei dir ist sie aktiv).

    und

    Wenn ich mich nicht irre ist das der Zeichensatz in den Projekteinstellungen (Unicode gegen ich glaube MCSB oder wie es heißt austauschen)...

    Also setzte ich meinen Zeichensatz auf "Nicht festgelegt" (da ich MCSB nicht habe) und schon ließ sich das Programm (bis auf zwei Warnungen, die ich aber behob) kompilieren. Der Programm-Absturz blieb aber trotzdem.
    Also vermute ich, dass der Fehler an dem oben genannten error C2440 liegt.
    Meine Frage ist nun, wie ich es kovertiert bekomme, oder ob es noch eine andere Lösung gibt.



  • hi

    Nah wie wohl ?

    wchar_t name={L"aaa"};

    Habe gedacht du kennst dich aus. Scheinbar nicht. Also meine doch, zuerst besser c in den griff bekommen, als sich mit etwas rumzuschlagen das man noch nicht versteht !

    Cya lb



  • Hi

    Um in nicht ganz durcheinander zu bringen sollte ich es noch Syntax mässig, richtig schreiben. 🙂

    wchar_t szName[]={L"hello"};

    lowbyte



  • Gast123 schrieb:

    Also setzte ich meinen Zeichensatz auf "Nicht festgelegt"
    ...
    Also vermute ich, dass der Fehler an dem oben genannten error C2440 liegt.

    "Nicht festgelegt" ist richtig. Der Absturz hat eine andere Ursache, vielleicht mal debuggen ...



  • @Phistomefel: Ich habe es jetzt mal mit Debuggen versucht; Und bei beiden Einstellungen (Zeichensatz auf Unicode bzw. "Nicht festgelegt") bekomme ich folgendes:

    [... bla.dll geladen...]
    "Pipette.exe": "C:\WINDOWS\system32\version.dll" wurde geladen
    "Pipette.exe": "C:\WINDOWS\system32\version.dll" entladen.
    Eine Ausnahme (erste Chance) bei 0x00000000 in Pipette.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
    Unbehandelte Ausnahme bei 0x00000000 in Pipette.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
    Das Programm "[5176] Pipette.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.

    Anscheinend liegt es an diesen Prozessadressen, dass das Programm abstürzt. Hat da noch jemand eine Idee, wie man es beheben kann?



  • Hi

    Also dem sage ich nich debuggen !!
    Dll's kannst du auch nicht so einfach debuggen !
    Ausser Compiler Warnungen bekommst du nichts! Das heisst wen alles Syntaktisch ok ist muss es nicht heissen dass das Programm auch einwandfrei läuft.
    Wie ich schon gesagt habe (Buffer / Stack)Overflows / Formatstring bugs etc.. mal auf das schauen ! Man sollte sich schon mit Pointer etc. auskennen. Viele Probleme liegen nämlich dort. !!

    lowbyte_


  • Mod

    DLLs debuggt man genauso einfach wie jedes andere Ausführbare Programm...



  • Hi

    Wie willst du eine dll debuggen ? mit dem compiler geht das nicht ! Damit du die exportierten funktionen nützen kannst, musst du ja eine korekte dll haben ! und wen du die Funktionen jetz in der main aufrufen würdes kannst du das debuggen in der dll vergessen ...ala breakpoint !

    Lowbyte



  • Hi

    bei der erstellung der dll ist es natürlich was anderes !

    Lowbyte_



  • Hi

    Und zu Schluss.. wen du di dll bei erstellung debuggst, kannst du nur syntax fehler erkennen und sonnst nichts. Weil du ja keine werte hast die du prüfen kannst. Also logische fehler kannst du so nicht erkennen.

    Darum werden dll's anders debuggt !
    Lowbyte


Anmelden zum Antworten