PDA

View Full Version : [OT] Frage: Coding ...



NeoTrace
29-06-07, 21:41
Gibt es in VB.NET eine (einfache) Möglichkeit die GetMessage() schleife von C++ nachzubilden?

Oder darf ich mich wieder sämtlichen API-Calls (USER32) bedienen?

(nen in C++ Source gepointerten Speicherblock eines (C++)Structs manuell in VB.NET nachzubilden ist schon ne Krankheit)

Mighty Max
29-06-07, 23:18
Möglich wird es schon sein. Es wird nur sehr unzuverlässig sein.

Der Msg-Dispatcher von VB.NET ist für den Programmierer nicht transparent. Du kannst zwar per PeekMessage ein "Ohr" an die Queue legen, allerdings ist die Wahrscheinlichkeit, dass der Msg-Dispatcher dir Einträge klaut bevor sie bei deinem Call angelangt sind.

Andersherum, wenn du die exclusive Kontrolle übernimmst kommen keine Top Level Nachrichten mehr an wo sie sollen. (Die Frage hier ist, inwieweit VB.NET diese meist von Fenstern entkoppelten Nachrichten für seine Infrastruktur nutzt)

Sagen wir's zusamengefasst so: Es ist nichts, was man machen sollte, wenn es sich irgendwie vermeiden lässt

Eine bessere Lösung ist es sich in den Ablauf der Nachrichtenverarbeitung _hinter_ "DispatchMessage()" einzuklinken. Beispiel: hier (http://www.codeproject.com/dotnet/VB6andVBNETWindowMessages.asp)

braunhaar
30-06-07, 01:20
lol...und das soll ich noch lerenen -.-

nu bekomm ich angst xD

<< macht seinen ita xD

NeoTrace
30-06-07, 05:46
Wow, fettes danke =) Ist komplett mit Callback der Code!

Öh ja, ... dumm das .NET zu "managed" ist :(
Man hätte zumindestens das MessageSystem transparenter gestalten können, da es ja eigentlich doch wichtig ist.



lol...und das soll ich noch lerenen -.-

nu bekomm ich angst xD

<< macht seinen ita xD

Abwarten, ich bezweifle das du dich mit VB / C++ conversionen auseinandersetzten musst :p

btw. hat jemand nen Abbild vonner Struct mit HWND (4Byte) & WORD (2Byte) ? Komm atm nicht an ein MEMDump, die IDE will nicht :/
Ich muss wissen ob es in diesen bereich auch nullterminierung der segmente gibt.. ich habs vergessen :(

Mighty Max
30-06-07, 09:45
oO. Im Flat Memory Modell von Windows existieren keine Segmente. (Ausnahme hier Spezailsegmente wie FS (Process Struct Pointer, Exception Handler Stack)

Wie der Struct nun tatsächlich aussieht, hängt allerdings von der Compilersetting "Struct Align" und dem Status des "packed" Attribut ab.

In den Defaultsettings unter ist deine Struct einzelstehend 8 Bytes gross:
(in order)
4 Bytes HWND,
2 Bytes WORD,
2 Bytes padding (zum 4 Byte align) der Inhalt hier ist 'no care'

NeoTrace
01-07-07, 14:42
Danke, mit Segmente sind die einzelnen Abschnitte gemeint, also das HWND segment und das WORD segment.

Notfalls dump ich mit die STRUCT in eine FIle.