Problem mit WinAPI-Struktur
Übersicht

![]() |
Der EisvogelBetreff: Problem mit WinAPI-Struktur |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Ich versuche gerade diese Struktur: Code: [AUSKLAPPEN] typedef struct tagMODULEENTRY32 {
DWORD dwSize; DWORD th32ModuleID; DWORD th32ProcessID; DWORD GlblcntUsage; DWORD ProccntUsage; BYTE *modBaseAddr; DWORD modBaseSize; HMODULE hModule; TCHAR szModule[MAX_PATH]; TCHAR szExePath[MAX_PATH]; DWORD dwFlags; } MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32; In einen BM-Type zu quetschen. Allerdings will es mir nicht gelingen, die "Strings" szModule und szExePath in den Type einzulagern: BlitzMax: [AUSKLAPPEN] Type MODULEENTRY323 So versuche ich momentan. Es ist eigentlich auch logisch, dass das so nicht funktionieren kann. Aber wie kann ich diese String sonst in einem Type einbetten? Klar würde es auch mit einem reinen MemAlloc(551) gehen, aber ich möchte die Komfortabilität der Types genießen können. Bei einfach Strukturen, wie der POINTAPI klapp es ja wunderbar. Das sind halt auch keine Strings. Wäre cool wenn das irgendwie geht . Wenn nicht, dann muss ich es nur mit MemAlloc machen. Damit geht es. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also wenn das BM-Type zu den C/C++ Structs kompatibel sein soll, dann musst du natürlich auch die Datentypen genau beachten. Alle weiß ich nun nicht genau, aber DWORD ist ein Short (16 bit), ein Byte* ein Pointer auf einen Byte (also Byte Ptr), HMODULE musst du nachschauen (scheint ein Struct in einem Struct zu sein, musst es dir mal anschauen, kA) und TCHAR ist (meine ich) ein einfaches Byte-Array. MemAlloc funktioniert da nicht, da es dann nur ein Pointer auf den Memory-Block wäre. | ||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mh, Also mit diesen Größenangaben, also immer Int hat es mit MemAlloc funktioniert. Wenn ich diese Struktur in einem VB-Bereich suche, bekomme ich als Ergebnis auch eine Struktur mit Ints. Es wäre meiner Meinung nach sinnlos da etwas anderes zu machen, da die Zahlen die da rein müssen Ints sind. Short geht da nicht. Aber danke für den Hinweis. Ich werde das gleich mal ausprobieren.
EDIT: Also ich habe das mit dem DWORD jetzt nochmal nachgeschaut. Das ist schon ein 32 Bit Wert (siehe hier). Auch HMODULE entspricht einem 32 Bit Wert. Ich hab jetzt modBaseAddr in eine Pointer umgewandelt brachte aber nix. Ich habe aus den 2 String Byte-Array gemacht, hilft aber leider auch nicht. Wenn ich dort dann drauf zugreifen will, bekomme ich immer die schöne Meldung EXCEPTION_ACCESS_VIOLATION. Diese Meldung kenne ich nur von ungeschützen Speicherzugriffen, vorher ist mir diese noch nie begegnet. Ich denke mal, dass hat aber nicht mit damit zu tun oder? |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Strings werden dort explizit als Char-Array konstanter Grösse definiert, weswegen sie zur Grösse der Struktur hinzuzählen. Das Array nimmt also nicht nur 4 Bytes ein (Zeiger zum ersten Element) wie in BMax, sondern ist Teil der Struktur. Beide Arrays zusammen nehmen also nochmal MAX_PATH*2 zusätzliche Bytes ein.
Einen Type mit Arrays zu 'vergrössern' geht in BMax leider nicht, da Arrays dort immer Referenzen zu Speicherblöcken auf dem Heap sind (immer 4 Bytes). Du kannst also entweder so viele Fields hinzufügen, dass sie die Arrays ersetzen (was je nach Grösse von MAX_PATH ziemlich unpraktikabel wird), oder du musst wohl oder übel jedesmal, wenn ein Zeiger auf das Struct verlangt wird, einen Speicherblock (MemAlloc) in passender Grösse angeben und die Werte nachträglich in den Type übertragen. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, Danke. Dann werde ich mir jetzt die Funktionen wrappen. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group