INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
本業の方のお仕事が再び忙しくなりつつあるので、断続的にしばらく更新が止まることがあります。

目次 | ←前へ / 2014-12-27 14:42 / 次へ→ / 最新へ⇒

■ListView to CSV ver.2.22.10β更新のお知らせ

2014/12/27 14:42:41


RSSRSS配信中

https://www.inasoft.org/








本日は、ListView to CSV ver.2.22.10βを公開しています。

β版にしているのは、前回の更新から日数が空きすぎて、外部ライブラリや共有ライブラリが先行してしまっており、それの取り込みで不具合が出ないかを検証した方が良いかな、という理由のため。実際上は問題は出ないはずなので、年末までには正式版に格上げしたいと考えています。

今回の主な修正内容は、64bit版ListView to CSVから、32bitアプリのリストビューのカラムヘッダの内容を取得できていなかった不具合の解消です。

同業の方からご連絡がありまして、その方の所でも同様の不具合が発生しており、もしかしたら「64bitプロセスから32bitプロセスのリストビューのカラムヘッダが取れない、Windows上の仕様上の問題でもあるのでは?」という疑念が沸いて、徹底的に調査してみよう!ということになったのですが、(少なくともListView to CSV側としては)単にプログラムがバグっていただけだったというオチでした。

64bitプロセスから32bitプロセスの情報を取得する際、ポインタ(ハンドルやLPARAMを含む)を含んだ構造体を経由して情報を受け取る場合は、64bitプロセスと32bitプロセスにおけるポインタサイズの違いを考慮しなければなりません。

Windowsでは、64bitプロセスのポインタは64bit(8バイト)で、32bitプロセスのポインタは32bit(4バイト)だからです。

そのため、64bitプロセスが、64bit Windows上(のWOW64上)で動作する32bitプロセスにWindowsメッセージを送って情報を取得したいならば、LPARAMなりWPARAMなりにセットする構造体の中身に気を遣ってやらなければならないということです。

詳細は、ListView to CSVを作ってみよう!!番外編~x64を考慮した場合を参照のこと。


で、リストビューのアイテムの文字列を取得する方は、これを使って上手くいっていたのですが、カラムの文字列を取得する方は、上手くできていなかったというバグでした。

具体的には、WOW64上で動作するプロセス(32bitプロセス)かどうかを判定するためのIsWow64Process() APIに与えるためのhProcessを取得する際、PROCESS_QUERY_INFORMATIONフラグを付け忘れていたので、32bitプロセスなのかどうかを正しく判定できておらず、64bitプロセス向けのルートで動作するようになってしまっていました。

もう何年も前のことだから、どういう経緯でこんなバグを作っちゃったのかは、もはや記憶の彼方です...



ついでに今回のバージョンでは、「プロパティ」画面で、対象のコントロールを持つプロセスが32bitなのか64bitなのかを表示する機能を追加しています。

今回デバッグしていて、ちょっとややこしくなったので、確認用に追加した機能ですが、新バージョンを公開するにあたってわざわざ消すこともないかなぁと思いまして、残しました。

property.png



目次 | ←前へ / 2014-12-27 14:42 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。




2554447 (+0147)[+0573]

Copyright© 2010-2021 INASOFT