C #: Marshalling „wskaźnika do tablicy int” z SendMessage () lParam

Próbuję podklasować niezarządzane okno paska stanu z mojego zarządzanego serwera COM przy użyciu klasy odziedziczonej z NativeWindow i uruchamiać się w ścianie, próbując zrozumieć, jak prawidłowo przełożyć zawartość lParam.

http://msdn.microsoft.com/en-us/library/bb760757%28VS.85%29.aspx mówi, że zawartość tego lParam jest typu(LPARAM)(LPINT) aWidthsoraz że zawartość tej zmiennej jest w rzeczywistości „wskaźnikiem do tablicy liczb całkowitych”.

Nie potrafię znaleźć sposobu na poprawne przeprowadzenie tego. Celem jest przeczytanie lParam, dodanie naszej wartości do tablicy, a następnie wysłanie nowej wiadomości przezbase.wndProc(ref m).

Byłoby miło, gdybym mógłint[] array = (int[])m.*lParam lub somesuch, ale życie nie jest takie proste (i nie używam niebezpiecznego kodu). Niezdarnie próbowałem zmusić marszałka do przekazania mi czegośMarshal.PtrToStructure() ale wiedział, że od początku był skazany na niepowodzenie, ponieważ tablica C nie jest strukturą, a struktura, którą próbowałem zrobić, nie jest oczywista.

W tej chwili pozwalamy, aby pierwotne połączenie przechodziło, a następnie wykonując dodatkowe wywołania WinAPI, aby uzyskać tablicę, sformatować ją, a następnie ponownie wysłać, zanim pasek stanu może się odświeżyć. To działa dobrze, ale nie dość dobrze.

Jakieś pomysły?

Dzięki!

Tomek

PS - Miałem wiele problemów z grokowaniem, jak lParams są używane w C #, dokumentacja jest dość myląca: - /

questionAnswers(1)

yourAnswerToTheQuestion