Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddress() (https://www.delphipraxis.net/8871-kleine-nachhilfe-c-erbeten-ldrgetprocedureaddress.html)

anku 14. Sep 2003 13:00

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre
 
Probier vielleicht mal etwas der Art:
Code:
  KBDLAYERDESCRIPTOR* KbdLayerDescriptor;
und
Code:
LdrGetProcedureAddress(hModule, &asFunction, 0, KbdLayerDescriptor);
Desc = (*KbdLayerDescriptor)();
mfg

anku

Assarbad 14. Sep 2003 13:07

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre
 
Pointertypen auf die Funktion hatte ich auch schon probiert ... klappte bei mir zumindest nicht. Dafür klappt es aber mit deinem Vorschlag:

Code:
typedef PKBDTABLES (*KBDLAYERDESCRIPTOR)(VOID);

int mymain(int argc, char* argv[])
{
   UNICODE_STRING usBla;
   ANSI_STRING asFunction;
   HANDLE hModule;
   KBDLAYERDESCRIPTOR KbdLayerDescriptor;
   PVOID *X;
   PKBDTABLES Desc;

   RtlInitUnicodeString(&usBla, L"kbdus.dll");
   LdrLoadDll(NULL, 0, &usBla, &hModule);
   printf("HMODULE %8.8X\n", hModule);
   
   RtlInitAnsiString(&asFunction, "KbdLayerDescriptor");
   status=LdrGetProcedureAddress(hModule, &asFunction, 0, (void **)&KbdLayerDescriptor);

   printf("Status %8.8X\n", status);
   printf("Entrypoint %8.8X\n", (DWORD)KbdLayerDescriptor);
   Desc = (KbdLayerDescriptor)();
   printf("%4.4X\n", *Desc->pusVSCtoVK);
   printf("%2.2X\n", Desc->bMaxVSCtoVK);
   printf("%8.8X\n", (DWORD)Desc);

   LdrUnloadDll(hModule);
   return 0;
}
Danke euch allen (und natürlich besonders Nico ;))

@anku: Bei deinem Vorschlag gibt es auch Fehler :-/ ... leider ;)

Dezipaitor 14. Sep 2003 15:37

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre
 
OUT PVOID *FunctionAddress

das ist wohl gleichbedeutend mit
void *&FunctionAddress (c++)
oder
void **FunctionAddress (c)
weil PVOID ein void* ist.


out sieht nach Borland C++ aus oder?
und ist damit ein initialisiertes var - also per referenz.

daher muss man
zuerst auf (void**) oder (PVOID*) casten,
und dann mit & die Addresse der Funktion übergeben

NicoDE 14. Sep 2003 15:50

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre
 
Zitat:

Zitat von Dezipaitor
out sieht nach Borland C++ aus oder?
und ist damit ein initialisiertes var - also per referenz.

OUT ist in ein leeres Macro und dient nur als Hint (dass die Variable vor der Übergabe nicht initialisiert werden muss). Es erzeugt auch keine 'automatische' Referenz (wie var/out in Delphi Language).

Gruss Nico

Dezipaitor 15. Sep 2003 21:48

Re: Kleine Nachhilfe in C erbeten -> LdrGetProcedureAddre
 
sowas ist ja cool:)
THX


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr.
Seite 2 von 2     12   

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