NativeWindowから継承したクラスを使用して、マネージドCOMサーバーからアンマネージドステータスバーウィンドウをサブクラス化しようとしていますが、lParamのコンテンツを適切にマーシャリングする方法を理解しようとして壁にぶつかっています。
http://msdn.microsoft.com/en-us/library/bb760757%28VS.85%29.aspxによると、このlParamの内容はタイプ(LPARAM)(LPINT) aWidths
であり、この変数の内容は実際には「整数配列。」
これを正しくマーシャリングする方法がわかりません。目標は、lParamを読み取り、値を配列に追加してから、を介して新しいメッセージを送信することbase.wndProc(ref m)
です。
できればいいのですint[] array = (int[])m.*lParam
が、人生はそれほど単純ではありません(そして、安全でないコードを使用することはできません)。私は不器用にマーシャラーに何かを介して私に何かを与えるように強制しようとしましたMarshal.PtrToStructure()
が、C配列は構造体ではなく、私が作成しようとした構造体は明らかにブリット可能ではないため、これは最初から運命づけられていることを知っていました。
現在、元の呼び出しを通過させてから、追加のWinAPI呼び出しを行って配列を取得し、フォーマットしてから、ステータスバーを再描画する前に再送信しています。これはうまく機能していますが、十分ではありません。
何か案は?
ありがとう!
トム
PS-私はlParamsがC#でどのように使用されているかを理解するのに多くの問題を抱えていました、ドキュメントはかなり混乱しています:-/