(何度か改良して今は健気に動いている)MSCompAssを使ってC#プログラムサンプルを見て学習していますが、前回は不覚にも「VB.NETも構造は同じようなのかな?」と好奇心を出したのが運の尽きで、Visual Basic(注)へのコンバーターが不十分で、その修正で時間を食いました。
注:元々Basic言語は、Microsofttのお家芸(昔はMicrosoft Basic, MS BasComなどがありました)ですが起源はダートマス大といわれています。昔8 bit、16 bit PCを買えば必ずROM Basicがついてきて、電源を入れたら即Basic環境という、OSのような位置づけでしたので、利用者はすべて使わなければならなかったのですが...MSの陰謀か?...現在はOSがウィンドウベースとなり、手続き型のBasic言語で生き残っているのはMicrosoftのVisual Basicや元祖ダートマス大のTrue Basicぐらいじゃないでしょうか?いずれにせよ、.NETになって従来のBasicとは似ても似つかなくなりましたが、コード(タイプ)量が多いので、関数型言語になれると敬遠したくなりますよね。
これに懲りてまたC#での学習に戻りましたが、2000年からC++のプログラミングをはじめ、Win32 APIのみでリソースエディターを書いた私には、矢張り
(1)C#でリソースをどう扱うのか?
(2)コントロールとかの定数を集めたヘッダーファイルはどう扱うのか?("#include"ってみたことないし。)
が疑問でした。それで今日、WEBで調べてみたのですが、
(1)については、まだよくわかっていないのですが、少なくとも
①C++で使う*.rcファイルや*.resファイルを扱うような記事は見いだせなかった。(C++のリソースは使わない。)
②リソースファイルはXMLのリソースファイル(*.resx)を使うのが一般的。
③いずれにしてもVisual Studioでのリソース作成、リソース管理を前提としたC#での利用が「常識」であり、
④結論としてC++でのリソース資産を使うような発想はあきらめた方がよい。
というものです。まだ正しいか否かわわかりませんが、恐らく当たらずとはいえ遠からず、ではないかと思います。
(2)については「すべてnamesupace(例の"using <DLL名>")で処理するので、"#include"は無い」そうです。
ということで、きっちりとしたC#によるウィンドウズプログラムを書こうと思ったら、矢張りVisual Studio無しではお話になりませんね、ということになります。
なお、この過程でC++プログラマーにはとても有益なサイトと巡り合えましたので紹介します。まさにポイントをついた説明で思わずうなづいてしまいました。
C++プログラマのためのC#入門
というわけで、余命長くない私が「C#に鞍替えして進もう」という考えは毛頭ないのですが、もともとの本ブログの目的である「ボケ防止」にはちょうど良いので、もう少しこのシリーズは続けてゆきましょう。(しかし、暇プロプログラム開発はBCCSkeltonベースでC++を使うことは、本ブログの性格からconst、です。)
同日追記:前にMSCompAssに関連して書いたように、C#コンパイラー(csc.exe)には"/win32res:<ファイルパス、名>"というオプションがあり、これによって"*.res"ファイルを実行プログラムに埋め込むことができます。しかし、組み込んだリソースをプログラムでどう使うか、についての記述が見つからず、一番近いのがこれかなと思う位のものしかありません。
しかし、これも実行プログラムに埋め込まれると"IDI_ICON"等のID名しかない(Dumpで見る限り)ので「これ」の例にあるようなID("MyNamespace.MyIcon.ico")をどうひねり出すのか、不明です。いずれにしてもC++ではWin32 APIの"LoadIcon"関数一つで済む処理がC#では結構面倒くさいことになることは確かです。