Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Pointer... (https://www.delphipraxis.net/42106-problem-mit-pointer.html)

Mr Whoopee 13. Mär 2005 21:05


Problem mit Pointer...
 
Hallo ihr Lieben,
ich habe ein Problem:
Ich habe eine Variable vom Typ Pointer (pRes), die ich an eine Procedure übergeben muss. Dieser Variable wird einen Wert zugewiesen:
hRes := FindResource(hInstance, 'bild1', 'bilder');
hRes := LoadResource(hInstance, hRes);
und dann wird das an pRes mit
pRes := LockResource(hRes);
übergeben.
Das geht jetzt nur für Ressourcen innerhalb der Exe. Bloß will ich jetzt eine Datei zuweisen, die irgendwo liegt. Wie kann ich den Pfad der Datei zum Pointer machen?

Danke für alle Hilfen,


Mr Whoopee


EDIT: Topic geändert

Luckie 13. Mär 2005 21:43

Re: Pointer
 
Hallo du lieber.
Zitat:

Zitat von Mr Whoopee
Wie kann ich den Pfad der Datei zum Pointer machen?

Ich glaube, du hast nicht verstanden, was der Code macht. Ich rate jetzt einfach mal und sage, dass du an eine Ressource aus einer anderen Anwendung dran willst.

Bitte präzesier deine Frage und ändere auch den Titel deines Topics entsprechen. "Pointer" ist nicht sehr aussagekräftig und kann alles mögliche bedeuten.

Mr Whoopee 13. Mär 2005 22:58

Re: Pointer
 
Ja sorry Luckie, ich kapiers wirklich nicht... deshalb frag ich ja. Und zum Thema Topic fiel mir auch nichts besseres ein.
Also die Procedure wird schematisch so aufgerufen:
Name(LongBool,Pointer,Cardinal,Cardinal,Cardinal);
Der Pointer wird ja, wie schon oben geschrieben, so erstellt:
Delphi-Quellcode:
hRes := FindResource(hInstance, 'bild1', 'bilder');
hRes := LoadResource(hInstance, hRes);
pRes := LockResource(hRes);
Bloß ist das der Code, um eine Ressource aus der Exe dieses Programms zu holen. Ich möchte jedoch keine Ressource holen, sondern gleich eine Datei zuweisen. Da die Prozedur aber nur den Pointer da annimmt komm ich nicht weiter.

Ich hoffe, dass ich mich jetzt besser ausgedrückt habe..


In Hoffnung... Mr Whoopee

Luckie 14. Mär 2005 02:01

Re: Pointer
 
Zitat:

Zitat von Mr Whoopee
Ich hoffe, dass ich mich jetzt besser ausgedrückt habe..

Ehrlich gesagt nicht. Was willst du den für eine Datei zuweisen? Und was willst du dann mit der Datei machen?

Der springende Punkt, warum der Code eine Ressource aus dem eigenen Programm extrahiert ist diese Zeile:
Code:
hRes := FindResource([b]hInstance[/b], 'bild1', 'bilder');
Das PSDK sagt dazu:
Zitat:

Code:
HRSRC FindResource(
    HMODULE hModule,
    LPCTSTR lpName,
    LPCTSTR lpType
);
hModule
[in] Handle to the module whose executable file contains the resource. A value of NULL specifies the module handle associated with the image file that the operating system used to create the current process.
Du musst dort also ein Handle auf das zu ladende Module übergeben an dessen Ressource du dran willst. Also zumBeispiel so:
Delphi-Quellcode:
foo(bBool: LongBool,pPoeint: Pointer, intBar1: Cardinal, intVar2: Cardinal, intBar3:Cardinal, ExeFilename: String);
begin
  hRes := FindResource(GetModuleHandle(ExeFilename), 'bild1', 'bilder');
  ...;
  ...;
end;
Allerdings zu beachten:
Zitat:

The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process.
Geht also nur so bei DLLs, die man vorher mit MSDN-Library durchsuchenLoadLibrary zum Beispiel in seinen eigenen Adressraum geladen hat. Wie das zum Beispiel RessourcenEditoren bei Exe-Dateien machen, weiß ich im Moment auch nicht. Aber eine Suche im Forum mit entsprechenden Suchbegriffen sollte helfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz