AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi DLL Funktionen einer Klasse exportieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Funktionen einer Klasse exportieren

Ein Thema von Horst0815 · begonnen am 18. Apr 2012 · letzter Beitrag vom 18. Apr 2012
Antwort Antwort
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#1

DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 17:35
hab eine Klasse in fremder Unit die so aussieht
Delphi-Quellcode:
Type
  TScanHook = Class
  Public
    constructor Create;
    Procedure InstallHook(dwThreadId: DWord);
    Procedure RemoveHook;
  End;
Die soll jetzt in eine DLL exportieren

Delphi-Quellcode:
type
  CScanHook = class(TScanHook)
  public
    Procedure InstallHook; Override;
    Procedure RemoveHook; Override;
  end;


function CreateMWStObj: CScanHook; stdcall;
begin
  Result := CScanHook.Create;
end;

Procedure CScanHook.RemoveHook; Override; stdcall;
.......................



Procedure CScanHook.InstallHook(dwThreadId: DWord); Override; stdcall;
....................

exports
CreateMWStObj resident;
  InstallHook,
  RemoveHook;
begin

end.

was aber zu
Zitat:
[DCC Fehler] HookDLL.dpr(26): E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden
führt


weiß jemand weiter
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 18:06
Dann mach die Methoden doch virtuell

Delphi-Quellcode:
type
  TFoo = class
    procedure MyMethod; virtual;
  end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#3

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 18:23
Manchmal isses auch einfach Danke erstmal was aber zum nächsten Problem Führt

Procedure CScanHook.InstallHook(dwThreadId: DWord); Override; stdcall;
Zitat:
[DCC Fehler] HookDLL.dpr(104): E2070 Unbekannte Direktive: 'override'
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 18:36
Override hat allein in der Klassendeklaration zu stehen, nicht aber in der Implementation. BTW: DLL und Klassen, wenn das man gut geht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 18:37
Das gibt man ja auch nur in der Klassendeklaration an und nicht in der Implementation.

[edit]
Mist, da wollte ich schon die Klassenvervollständigung vorsachlagen
und dann sah ich ein Starter.
$2B or not $2B

Geändert von himitsu (18. Apr 2012 um 18:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 18:38
Da guttenbergt jemand
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 18:45
Der rote kistige Gutenbergwarner funktioniert halt nicht.

Zitat:
BTW: DLL und Klassen, wenn das man gut geht.
Technisch (nur für den Import) ist das möglich, aber abraten kann man davon nur.
$2B or not $2B

Geändert von himitsu (18. Apr 2012 um 18:47 Uhr)
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#8

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 19:49
Ist ne C Project wo ich mir was Borgen will was mich zumnächsten Problem Führt

Code:
LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
//   AfxMessageBox("12345");
      if(g_hHook == NULL)
      {   // Read the data from the shared resources
         DWORD dwData = 0, dwSize = sizeof(DWORD);
         g_obIPC.Lock();
         g_obIPC.OpenIPCMMF();
         g_obIPC.ReadIPCMMF((LPBYTE)&dwData, dwSize);
         g_obIPC.Unlock();
         g_hHook = (HHOOK)dwData;
      }


   if(code>=0)
   {
      //if(wParam==WM_SCANPWD)
      {
           CString strTemp;
         strTemp="catch the Windows Message\n";

            
         MSG *msg=(MSG *)lParam;
         HWND hWnd, hWndPwdDlg;
         hWnd=(HWND)msg->wParam ;
         hWndPwdDlg=(HWND)msg->lParam;

         //MessageBox(hWndPwdDlg,strTemp,"tip",MB_OK);
         char szBuffer[100];
         SendMessage(hWnd,WM_GETTEXT,sizeof(szBuffer),(LPARAM)szBuffer);
         //MessageBox(hWndPwdDlg,"asdf","dafasdf",MB_OK);
           COPYDATASTRUCT cds;
         cds.cbData=sizeof(cds);
         cds.dwData=(DWORD)hWnd;
         cds.lpData =szBuffer;
         SendMessage(hWndPwdDlg, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&cds);
         //MessageBox(hWndPwdDlg,"asdf","dafasdf",MB_OK);
         //TRACE("aljflajfl;ajkfla\n");
      
      }
         
   }
   return CallNextHookEx(g_hHook,code,wParam,lParam);
}
übersetzt zu

Delphi-Quellcode:
function GetMsgProc(code: integer; ewParam: WPARAM; elParam: LPARAM): LResult;
// hook code//removal flag//address of structure with message
var
  dwData, dwSize: DWord;
  strTemp: String;
  chWnd, hWndPwdDlg: HWND;
  msg: Windows.TMsg;
  szBuffer: Array [0 .. 99] of AnsiChar;
  cds: COPYDATASTRUCT;
Begin
  // AfxMessageBox("12345");
  if g_hHook = 0 then
  begin // Read the data from the shared resources
    dwData := 0;
    dwSize := sizeof(DWord);
    LockIPCMMF;
    OpenIPCMMF;
    ReadIPCMMF(@dwData, dwSize);
    UnLockIPCMMF;
    g_hHook := dwData;
  end;
  if code >= 0 then
  begin
    if ewParam = WM_SCANPWD then
    begin
      strTemp := 'catch the Windows Message';
      msg.message := elParam;
      chWnd := Windows.PMsg(ewParam)^.message;
      hWndPwdDlg := Windows.PMsg(elParam)^.message;
      MessageBox(hWndPwdDlg, PWideChar(strTemp), 'tip', MB_OK);
      SendMessage(chWnd, WM_GETTEXT, sizeof(szBuffer), LPARAM(@szBuffer));
      // MessageBox(hWndPwdDlg,'asdf','dafasdf',MB_OK);
      cds.cbData := sizeof(cds);
      cds.dwData := chWnd;
      cds.lpData := @szBuffer;
      SendMessage(hWndPwdDlg, WM_COPYDATA, WPARAM(chWnd), LPARAM(@cds));
      // MessageBox(hWndPwdDlg,'asdf','dafasdf',MB_OK);
    end;
  end;
  Result := CallNextHookEx(g_hHook, code, ewParam, elParam);
end;
wird aufgerufen mit

Code:
g_hHook=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,g_hInstance,dwThreadId);
was ich zu
g_hHook :=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,g_hInstance,dwThreadId); übersetzt hab

wobei er natürlich bei GetMsgProc meckert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 19:57
Zitat:
wobei er natürlich bei GetMsgProc meckert
Keine Ahnung.
Währe ja zu praktisch, wenn man uns die Fehlermeldung verraten würde.
PS: Strg+C funktioniert an sehr vielen Stellen.


Die Aufrufkonvention?
stdcall
$2B or not $2B
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#10

AW: DLL Funktionen einer Klasse exportieren

  Alt 18. Apr 2012, 20:03
Ja das wars danke, nun hör ich auf für heute
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:12 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