06. juli 2004 - 13:53Der er
14 kommentarer og 1 løsning
konverter intptr til globlt handle
Når jeg allokerer hukommelse til unmanaged kode får jeg en IntPtr retur, for at kunne sende denne pointer til et andet program skal den konverteres til et globalt handle, hvordan laver man denne konvertering???
A platform-specific type that is used to represent a pointer or a handle.
...
The IntPtr type is designed to be an integer whose size is platform-specific. That is, an instance of this type is expected to be 32-bits on 32-bit hardware and operating systems, and 64-bits on 64-bit hardware and operating systems.
The IntPtr type can be used by languages that support pointers, and as a common means of referring to data between languages that do and do not support pointers.
IntPtr objects can also be used to hold handles. For example, instances of IntPtr are used extensively in the System.IO.FileStream class to hold file handles.
Ser alligevel ud til at IntPtr er et globalt handle. Mit problem ser ud til at være i IPC mellem en C# applikation samt en Delphi applikation, gennem hukommelsen.... det ser ikke ud til at jeg griber det korrekt an...
Applikation 1 allokerer noget hukommelse og får et handle dertil. Applikation 1 skriver data i det stykke hukommelse. Applikation 1 sender en message (SendMessage) til Applikation 2, hvor WParam er handlet Applikation 2 Læser Handle fra WM_USER+X message Applikation 2 Læser værdi fra hukommelse ud fra Handlet
Det ville ikke helt virke, det er til at lave et Automatiseret Software Test System med. Som det ser ud nu har vi valgt at lave det på en ikke så fed måde (App1 skriver til regdb, send message til app2, app2 læser fra regdb)
For mig ser det ud til i dokumentationen at den skal bruge en tmp fil eller lignende. Jeg ville allerhelst lave IPC gennem hukommelsen og ikke gennem en fil. Hvis det er mig der er forkert på den, kan du så flække et hurtigt eksempel sammen der viser hvordan man gør det til hukommelsen?
using System; using System.Runtime.InteropServices;
class MainClass { const int PAGE_READONLY = 0x0002; const int PAGE_READWRITE = 0x0004; const int PAGE_EXECUTE = 0x0010; const int PAGE_EXECUTE_READ = 0x0020; const int PAGE_EXECUTE_READWRITE = 0x0040; const int PAGE_GUARD = 0x0100; const int PAGE_NOACCESS = 0x0001; const int PAGE_NOCACHE = 0x0200; const int FILE_MAP_COPY = 0x0001; const int FILE_MAP_WRITE = 0x0002; const int FILE_MAP_READ = 0x0004; const int FILE_MAP_ALL_ACCESS = 0x001F;
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.