2009年9月4日金曜日

VLゴシックフォントはClear Typeで

いつものとは別の端末で開発することになったので、いろいろ環境設定中です。(Windows XP)
VisualStudioとかテキストエディタでコーディング用にいつも使っているVLゴシックフォントが入ってなかったので、入れて設定したんですが、なんか表示が薄いというかぼんやりしてる……。
ググったら、Windowsの[画面のプロパティ]-[デザイン]-[効果]の、[次の方法でスクリーンフォントの縁を滑らかにする]を「Clear Type」にしないといけないようです(デフォルトは「標準」)。
そのように設定しなおしたら表示が改善されました。それでもMS ゴシックに比べるとちょっと薄い感じですが。
MS ゴシック使えばいいじゃんという話ですが、VLゴシックは紛らわしい文字の区別がつきやすいという特徴があって、コーディングにはこれが有用なんですよー。特に0(ゼロ)とO(大文字のオー)とか。ゼロには斜線が入ります。印字品質が良くないとか漢字フォントが下手(?)とかいう意見も聞きますが、印刷物を作成するのが目的じゃないからそんなのは別にいいんです。

VLゴシックフォントファミリ

2009年6月25日木曜日

Thunderbirdの便利な(というか要るだろJKな)アドオン

メーラとして無いと困るのにThunderbirdには無い機能……アドオンいれてやっと使えるようになりました。

メールの宛先に表示名を入れたくない
アドレス帳に登録するとき「表示名」をつけておかないと見出し的に不便なのですが、つけてると表示名が宛先に含まれて「○○ ○○<hogehoge@~.co.jp>」みたいになって送信されてしまいます。表示名は自分が見るのに都合よくつけたいわけで、送信相手に見えてしまうのは困る……。
Auto Address Cleaner」を入れると送信時に表示名を削除してくれます(メール作成時は表示されている)。

ウィンドウを閉じても常駐させたい
定期受信するには起動したままにしておかないといけないのですが、最小化してもタスクバーに出てて邪魔です。普通に閉じると終了してしまいます。
MinimizeToTray」を入れるとウィンドウを閉じても終了させずにタスクトレイに常駐させることができます。定期受信もできるし、アイコンダブルクリックで表示させることもできます。

複数の署名を使い分けたい
1つのアカウントで複数の署名を使うのはよくあることだと思うのですが(社内用と社外用とか、携帯宛には署名しないとか短い書名にするとか)、標準だと複数の差出人情報を作成しなければならず、署名を変えたいだけなのに面倒です。
Signature Switch」を入れると、メール作成画面で署名だけ切り替えられるようになります。

Thunderbirdつかいはじめ

開発環境が新しくなったんですが、メーラを入れてなかったので新たにThunderbirdをインストールしました。前の環境では秀丸メールを使ってたので、いろいろ設定してなるべく同じような使い勝手にしたいんですが、なかなか難しい……。そもそも、秀丸メールに限らず、普通メーラには備わってるものだと思ってたような機能がThunderbirdにはなかったりしますorz
さいわい、Thunderbirdはアドオンで機能を拡張することができるので、とりあえず、個人的にこれはないと困るという機能を入れてみました。詳しくは別投稿にて。

2009年6月2日火曜日

WinHelpのソースをHTML Help Workshopで利用

WinHelpのソースがあれば、これをHTML Help Workshopに取り込んで、HTML Helpに変換することができます。
HTML Help Workshopで新規プロジェクトを作成し、[Convert WinHelp project]のチェックをつけて進みます。.hpjファイル(WinHelpのプロジェクトファイル)を聞いてくるので、WinHelpのソースからこのファイルを選択すればOK。
元のWinHelpの内容にもよるかもしれませんが、目次が変換されない(.hhcファイルが作成されない)とか、Index(元のWinHelpの「キーワード」)の日本語が文字化けするとか、変換も完全ではないので、あとはHTML Help Workshopで追加・修正します。

2009年6月1日月曜日

.hlpファイルを展開してソースを入手

HTML Help Workshopには既存のWinHelpプロジェクトをHTML Helpプロジェクトに変換する機能があります。しかし変換できるのはWinHelpプロジェクトなので、.hlpファイル単体だと使えません。
そこでUniversal Extractorを使用して、まず.hlpファイルからWinHelpプロジェクトに変換(?)します。
Universal Extractorはアーカイブファイル全般を解凍(展開)できるフリーソフトです。これを使って.hlpファイルを解凍すると、指定のフォルダに、WinHelpのソース(.hpj、.rtf、.bmpファイル)が展開されます。このソースをHTML Help Workshopで使用することができます。

2009年5月29日金曜日

Win32 Help(.hlp)をHTML Help(.chm)にする

VB6→VB2005のアップグレードの続きなんですが(この前のとはまた別のアプリ)、コンテキストヘルプの呼び出しのところでアップグレードできませんでした。呼んでるヘルプがWin32 Help(.hlp)で、VB2005ではこれに対応していないのが大本の原因です(もちろん呼び出し方も修正しないといけないけど)。VB2005で使えるのは(というか.NETアプリから呼べるのは)HTML Help(.chm)です。
しかし.hlpファイルを.chmファイルに変換するソフトって、存在するにはするんですけど、有料のしかなさそうです。そう何回も使うものでもない(と思いたい……)のでできれば無料のもので済ませたい。
結局、
.hlpファイル→Universal Extractorで展開→HTML Help Workshopで変換、修正、コンパイル
とフリーウェアのみで変換することができました。詳細は次の投稿で。

2009年5月26日火曜日

VB6→VB2005 アップグレード

VB6(Xp)で作成したプロジェクトを、VB2005(Vista)へアップグレード。

VB6のソース(プロジェクト)をXp環境からVista環境にコピー→VB2005で開く→アップグレードウィザードが起動→ひとまず移行完了

と、だいたいのプロジェクトはOKだったんですが、ひとつ移行できないものが。アップグレードウィザードの最後にエラーが出て(エラー内容忘れた……こういうのはすぐ控えとかないとだめですね)、移行できませんでした。ソリューションエクスプローラが空の状態(プロジェクトが無い)で終了。エクスプローラでフォルダを見ると、ファイルはあるので、個々のソースの変換はできてたようです。
ここで、VB6のプロジェクトをVista環境で(VB6のまま)ビルドしてなかったことを思い出し、ビルド。すると、最後に、

システム レジストリへのアクセスでエラーが発生しました。

と出て、ビルド失敗。
ググってみると、どうもレジストリに権限がないのが原因らしい。いちいち調べるのめんどくさい……と思ったけど、ふと思い出して、VB6を右クリック「管理者権限で実行」から起動してみることに。そしたらあっさりビルド成功。
続いて、このプロジェクトを、同じく「管理者権限で実行」から起動したVB2005(VS2005)で開いてみると、今度はアップグレード正常終了。
試しに再度、普通に(管理者権限オプション選ばずに)起動したVB2005からアップグレードしてみたら、これも正常に終了。
結局、最初にVista上でVB6のビルドが通ってなかったのが原因だったのか……。
なんか内容整理できてませんがとりあえずメモ。

2009年5月21日木曜日

DLL修正ではまる

ずっと昔に他の人(退職しちゃっててもう居ない)がVC6で作成したDLLを修正することになりました。引数を1個追加するだけなので簡単……と思ったら、コンパイルは通るけどリンクでエラー。

リンク中...
ライブラリ .\Release/Test.lib とオブジェクト .\Release/Test.exp を作成中
Test.exp : error LNK2001: 外部シンボル "_TestFunction@16" は未解決です
Test.exp : error LNK2001: 外部シンボル "_TestFunction@16" は未解決です
.\Release\Test.dll : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

Test.dll - エラー 3、警告 0

と、結構ありがちなエラー。外部シンボルが未解決というと、.defファイルに書いてる関数名が間違っているというのがパターンなんですが、何度見直しても合ってるし……。.defファイルはこんな感じ。

EXPORTS
TestFunction = _TestFunction@16 ;VB用の export
_TestFunction@16 ;VC用の export

関数名は合ってると。では怪しいのは @16 なんだけどこれって何?
.defファイルの書式やらをググると、@の後の数字は序数で……とか書いてあったりするのですが、この場合は違いました。さらにキーワードを変えつつググっていたら、やっとそれらしい情報に到達。

C の装飾名の形式

関数宣言時の呼び出し規約が __stdcall の場合、.defファイルで記述するCの装飾名の形式は、

先頭にアンダースコア (_) が付き、末尾にアット マーク (@) が付き、その後ろにパラメータ リストのバイト数が続きます。

ということでした。つまり @16 というのは関数の引数リストのバイト数合計が16バイトということだったのですね。
今回は引数を追加したわけなので、そのバイト数分増やさないといけなかったのです。
4バイトの引数を1個追加したので、@16 → @20 に修正してリビルドしたら……リンク通りました。

なんかこれだけ調べるのに丸1日以上かかってしまったよ。とほほ。最初はVC6の環境がなくてVC2005で開いてやってたから、そのせいかもと思って古い環境でやり直したりとか……。
DLLの作成方法にはいろいろあって、.defを使用しない方法もあるんですけど、今回は修正元が使ってたのをそのまま使ったので。

ブログはじめました

このブログにはWindowsのアプリ開発Tipsとかトラブルシューティングとかを書こうと思ってますが、自分用のおぼえがきのつもりなので、他人が見るには不親切な記述があるかと思いますがご容赦願います。何かありましたらコメントください。