Avatar billede psycosoft-funware Nybegynder
17. juni 2008 - 22:14 Der er 9 kommentarer og
1 løsning

assigne hex addresse til procedural pointer

hej eksperter :)

jeg sidder og er ved at oversætte noget C++ kode til Delphi og har i denne sammenhæng behov for at assigne noge hexadecimale addresser til nogle procedurale pointere, helt bestemt direkte addresser i en DLL fil.
Kodestumpen er som følger (men dette kan jo ikke komplieres):

@PInit := $10022318;

på forhånd tak:)
Avatar billede martinlind Nybegynder
17. juni 2008 - 23:45 #1
der findes nogle functioner til at hente proc-adr. fra dll'er, søg i hjælpen, kan ikke lige huske hvad de hedder
Avatar billede arne_v Ekspert
18. juni 2008 - 04:31 #2
Avatar billede arne_v Ekspert
18. juni 2008 - 04:48 #3
Til dit oprindelige spørgsmål så prøv:

:= ptr($10022318)
Avatar billede psycosoft-funware Nybegynder
18. juni 2008 - 19:54 #4
Jeg kender udemærket til GetProcAddress og LoadLibrary, det forholdersig bare sådan at jeg er nød til at tilgå nogle funktioner direkte i Dll'en. :)

>>arne_v: := Ptr(HexAddr); var lige det jeg søgte. venligst læg et svar :)

lige et lille sidespørgsmål: i selv samme C++ kode har jeg et memcpy kald, hvor der er defineret en konstant: er det tilsvarende i delphi når man sætter et & tegn forand en konstant (fx memcpy(Dest, &Src, 4)) i forbindelse med procedure kaldet? :)
Avatar billede psycosoft-funware Nybegynder
18. juni 2008 - 20:24 #5
det er denne memcpy linie jeg prøver at få oversat:

DWORD conv=4

memcpy((void*) 0x10096cd8, &conv, 4);

lige for at gøre tingene lidt nemmere :)
Avatar billede arne_v Ekspert
18. juni 2008 - 21:03 #6
svar
Avatar billede arne_v Ekspert
18. juni 2008 - 21:08 #7
Jeg forstaar ikke dit sidste spoergsmaal.

Memcpy tager 3 argumenter: pointer som der kopieres til, pointer som der kopiers fra, antal bytes

& paa andet argument tager adressen ligesom @ og addr funbktionen goer i Delphi.
Avatar billede psycosoft-funware Nybegynder
18. juni 2008 - 21:46 #8
det hjalp med at sætte @ forand konstanten :)

(jeg benytter Move() proceduren som erstatning for memcpy)

nu er der bare et andet lille problem der har sneget sig ind. i anden parametre i Move() er det af typen var der skal indsættes. hvordan oversætter jeg denne: (void*) 0x10096cd8 korrekt?

jeg har prøvet at lave to variabler

var
  I: Integer;
  PI: ^Integer;
begin
  I := $10096cd8;
  PI := Addr(I);
  Move(@Conv, @PI, 4);
end;

men bliver ved med at give mig en compiler error, Variable required. hvad gør jeg galt?
Avatar billede arne_v Ekspert
19. juni 2008 - 01:46 #9
Som jeg læser dokumentationen på Move så skal du bruge:

Move(Conv, I, 4);
Avatar billede psycosoft-funware Nybegynder
29. juni 2008 - 19:38 #10
>>arne_v: fandt ud af at jeg skulle bruge CopyMemory(); istedet da proceduren acceptere en pointer som kilde og destinations parametre. så nu virker det hele perfekt, tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester