AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verzweifel an DLL

Ein Thema von HaCkAttaCk2001 · begonnen am 19. Jun 2004 · letzter Beitrag vom 22. Jun 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#1

Verzweifel an DLL

  Alt 19. Jun 2004, 20:14
Hi.

Ich habe mir jetzt über 10 verschiedene Beiträge zu Exports, 'external' und DLLs angeschaut... aber ich finde einfach nicht heraus wieso ich die Fehlermeldung: "Der Prozedureinsprungpunkt "DisableTaskKeys" wurde in der DLL "TaskKeyHook.dll" nicht gefunden." bekomme.

Hier der Delphi-Code mit dem ich die Funktion einbinde:

Code:
function DisableTaskKeys(bDisable, bBeep : boolean) : boolean; stdcall;
  external 'TaskKeyHook.dll';
(Die DLL existiert natürlich.)

Und hier der relevante Codeausschnit der DLL (C++):

Code:
DLLEXPORT BOOL DisableTaskKeys(BOOL bDisable, BOOL bBeep)
{
   if (bDisable) {
      if (!g_hHookKbdLL) {
         g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL,
            MyTaskKeyHookLL, MyDll.m_hInstance, 0);
      }

   } else if (g_hHookKbdLL != NULL) {
      UnhookWindowsHookEx(g_hHookKbdLL);
      g_hHookKbdLL = NULL;
   }
   g_bBeep = bBeep;

   return AreTaskKeysDisabled();
}
Ich habe gerade erst angefangen mit DLLs zu hantieren, also bitte nicht schimpfen, dass ich so blöd bin (falls ich irgendeinen dummen Fehler gemacht hab...).


C ya.
Support bacteria! They are the only culture some people have...
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 20:45
also dass die dll in c ist machts nicht einfacher da ich nicht sagen kann ob der code stimmt. prinzipiell heisst die fehlermeldung das was du willst gibts nicht. versuchs mal ohne stdcall... vielleicht gehts dann!
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#3

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:24
Bist du dir sicher dass du die funktion auch exportierst in der DLL? Zudem stelle sicher dass die funktion mit STDCALL in deiner DLL deklariert ist.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:37
Moin HaCkAttaCk2001,

also die genannte Fehlermeldung sagt i.d.R. genau das aus, was der Fehler ist, sprich:
Unter dem Namen, unter dem Du die Funktion importieren willst, kann sie in der DLL nicht gefunden werden.

Wichtig ist immer, dass die Gross-/Kleinschreibung exakt eingehalten werden muss.
Um den C-typischen Booltyp zu verwenden, müsstest Du übrigens Longbool nehmen, nicht boolean.

Leider bin ich nicht C(++) fest genug, um entscheiden zu können, ob die Funktion wirklich unter dem Namen exportiert wird, den Du für den Import angegeben hast. Eventuell wird die Funktion auch nur über ihren Indexwert in der Exporttabelle exportiert, so dass Du sie überhaupt nicht mit Namen importieren kannst.

Ein Import könnte z.b. so aussehen:

Delphi-Quellcode:
// Hier wird der Name selbst mit angegeben
// wie die Delphi Funktion heisst spielt dann keine Rolle
function DTK(const bDisable : Longbool;const bBeep : Longbool) : Longbool; stdcall; external 'TaskKeyHook.dllname 'DisableTaskKeys';

// oder über den Index (in diesem Beispiel frei erfundener Wert)
function DTK(const bDisable : Longbool;const bBeep : Longbool) : Longbool; stdcall; external 'TaskKeyHook.dllindex 42;

// Hier muss der Name unter dem die Funktion exportiert wird
// exakt so heissen, wie der Delphi Funktionsname.
function DisableTaskKeys(const bDisable : Longbool;const bBeep : Longbool) : Longbool; stdcall; external 'TaskKeyHook.dll';
Schau Dir doch die DLL mal mit dem Bei Google suchenDependency Walker an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#5

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:42
Hi.

Der Dependency Walker sagt, die Funktion wäre: int DisableTaskKeys(int,int) . Eigentlich genau das, was ich oben auch stehen habe, oder?

PS: Der DLL-Source-Code stimmt unter Garantie. Denn der ist aus der Microsoft MSDN, wenn ich mich nicht täusche. Daran wollte ich üben, wie ich sowas einbinden kann. Aber das sich das als so schwer herausstellt...

Edit: Ich hatte nun noch irgendeine Schutzverletzung... die hab ich wegbekommen indem ich stdcall; weggelassen habe. Die exportierte Funktion funktioniert (fast - siehe unten!) einwandfrei!!

Ich möchte allen die mir geholfen haben herzlich danken! (Und mir vllt. noch bei dem Problem weiter unten helfen

Hier die Lösung:

Das war der finale Code:
Code:
function DisableTaskKeys(const bDisable : Longbool; const bBeep : Longbool) : Longbool;
  external 'TaskKeyHook.dll' index 2;

C ya!
Support bacteria! They are the only culture some people have...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:50
Moin HaCkAttaCk2001,



dann solltest Du mal überprüfen wie oft und wo die DLL auf Deinem Rechner auftaucht.
Ich kann mir nur noch vorstellen, dass das System beim Programmstart eine andere DLL einbindet, als Du mit dem Dependeny Walker geprüft hast.

[EDIT]
Oder probier mal die Funktion über ihren Index zu importieren.
[/EDIT]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#7

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:51
Zitat von Christian Seehase:
Ein Import könnte z.b. so aussehen:

Delphi-Quellcode:
// Hier wird der Name selbst mit angegeben
// wie die Delphi Funktion heisst spielt dann keine Rolle
function DTK(const bDisable : Longbool;const bBeep : Longbool) : Longbool; stdcall; external 'TaskKeyHook.dllname 'DisableTaskKeys';

// oder über den Index (in diesem Beispiel frei erfundener Wert)
function DTK(const bDisable : Longbool;const bBeep : Longbool) : Longbool; stdcall; external 'TaskKeyHook.dllindex 42;

// Hier muss der Name unter dem die Funktion exportiert wird
// exakt so heissen, wie der Delphi Funktionsname.
function DisableTaskKeys(const bDisable : Longbool;const bBeep : Longbool) : Longbool; stdcall; external 'TaskKeyHook.dll';
wenn du die parameter mit const deklarierst, werden sie als referenz uebergeben. dann haette die funktion aber so deklariert werden muessen:

BOOL STDCALL
DisableTaskKeys(BOOL *bDisable, BOOL *bBeep);
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#8

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:53
Zitat von Christian Seehase:
Oder probier mal die Funktion über ihren Index zu importieren.
Ich wuerde diese Variante nicht empfehlen, denn wenn man den Index (versehentlich) aendert, wundert man sich auf einmal warum das programm nicht mehr richtig funktionieren will
  Mit Zitat antworten Zitat
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#9

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:55
Zitat von w3seek:
Zitat von Christian Seehase:
Oder probier mal die Funktion über ihren Index zu importieren.
Ich wuerde diese Variante nicht empfehlen, denn wenn man den Index (versehentlich) aendert, wundert man sich auf einmal warum das programm nicht mehr richtig funktionieren will
Hi.

Der Index (also in der DLL) bleibt von mir unangetastet .

Damit entfällt dieses Problem...
Support bacteria! They are the only culture some people have...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Verzweifel an DLL

  Alt 19. Jun 2004, 21:55
Moin w3seek,

aber damit könnte man sicherstellen, dass die Funktion tatsächlich enthalten ist, nur offensichtlich nicht unter dem Namen exportiert wird, sondern eventuell decorated.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz