掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB.netとVB6間のSendMessageについて(移管) (ID:143290)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> やはりUAC絡みなのでしょうか・・? う〜ん。特に関係ないと思いますけれどね。 ところで、VB6 側の TextBox に WM_SETTEXT するというのは駄目でしょうか。 そうすれば VB6 側は、わざわざフック処理などせずとも、TextBox の Change イベントだけでデータ受信を受け取れるかと思います。 > 丸写しで試してみましたが、 手元の Vista 機は Win8 に入れ替えてしまったので、Vista に近い環境として Win7 Enterprise(x64)/VB6 Enterprise/VB2010 Ultimate(x86ビルド/AnyCPUビルド/x64ビルド) にて動作確認しています。 > 問題点を教えていただけますか? 以下の点を確認してみてください。 (1) VB6 側では、WM_COPYDATA 自体が受け取れないのでしょうか? それとも、 メッセージは受信できたが、中のデータが不正という事でしょうか? (2) VB2010 側で、Option Strict On を宣言した状態の EXE の場合、XP で動作しますか? (3) FindWindow で取得した HWND は、目的の VB6 Form を指し示していましたか? → HWND が 0 になっているとか、あるいは同名の別ウィンドウに誤送信されているとか。 (4) WM_COPYDATA 送信時の SendMessage の戻り値は =0 でしたか? ≠0 でしたか? → 正常時は 0 です。 (5) COPYDATASTRUCT のメモリ内容を確認してみてください。Unicode テキストとして 格納されていたり、サイズ指定が間違っていたりはしませんか? > XPの環境下では私の作った.net版送信ソフトも > 教えて頂いたサンプルの送信ソフトもどちらもばっちり動いています。 むしろ、何故あのコードで動いてしまうのかが疑問です。 当方で、『VBクロウWM_COPYDATA』という文字列を送信してみましたが、 提示されたコードの場合、SendMessage の時点で失敗してしまいましたし(x86 ビルド時)。 http://www.vb-user.net/junk/replySamples/2012.05.16.20.16/PInvokeStackImbalance.png そもそも、WM_COPYDATA は lparam に「COPYDATASTRUCT のポインタ」を要求するはずです。 ゆえにこの場合の lparam というのは、VB6 においては 「ByRef COPYDATASTRUCTユーザー定義型」 「ByVal Long にして VarPtr(COPYDATASTRUCT変数)を指定」 「ByRef Any にして COPYDATASTRUCTユーザー定義型を指定」 「ByRef Any にして VarPtr(COPYDATASTRUCT変数)を指定」 「ByRef Byte にして COPYDATASTRUCT相当の Byte 配列の先頭要素 buf(0) を指定」 などという形で用いられ、VB.NET においては、 「ByRef COPYDATASTRUCT構造体」 「ByVal COPYDATASTRUCTクラス」 「ByVal COPYDATASTRUCTを指し示すIntPtr」 のいずれかを渡すことになるはずです。 しかし、クロウさんの VB2010 コードでは、COPYDATASTRUCT 構造体が ByVal で渡されています。 これでは仮に動いたとしても、全然別のデータが参照されてしまうはずなのですが…。 (ByVal/ByRef を省略した場合には、VB.NET では ByVal と解釈されます) > VB6同士では問題ないのでどうなのでしょうか・・? VB6 とはまったく違うコードですよね? VB6 では、そもそも「ユーザー定義型を値渡しする」ことができませんので、 必然的に ByRef COPYDATASTRUCT として宣言されていたと思いますよ。 (ByVal/ByRef を省略した場合には、VB6 では ByRef と解釈されます) それと、COPYDATASTRUCT.dwData の本来の型は ULONG_PTR なので、 VB2010 では As Integer ではなく、As IntPtr にするべきです。 (VB6 では、As Long もしくは As OLE_HANDLE です)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.