すがブロ

sugamasaoのhatenablogだよ

ActiveX(その2)

前回はこちら

id:seiunsky:20070512:1178994235

わかったことまとめ

  • cabファイルでの出力方法
    →既存プロジェクトに CAB プロジェクトを追加し、追加された CAB プロジェクトでさらに「追加」で「プライマリ出力」を追加すると cab ファイルに ocx とか dll が追加されるようになる。
  • HTML に埋め込む ID について
    ActiveX のプロジェクトで自動的に生成された、 *.idl ファイルの下のほうにある、「Cプロジェクト名Ctrl*1 のクラス情報です」というコメント文の下に書いてある uuid の値を使えば良いっぽい。
  • 文字コードについて
    VS2005 からは unicode となった。 VC++ で普通にリテラルを書くときは TEXT("リテラル") もしくは _T("リテラル") とする必要がある。いや、無いかもしれんが、こうしておくと文字コードを ShiftJIS に変更しても Unicode のままでもうまい事マクロがやってくれるそうだ。
  • 画面の描画
    まず基底クラス(自動生成されたクラス?)の描画メソッドから表示させたいダイアログ等を描画させるようにする(これで最初に画面に表示されたときに画面にActiveXのウィンドウが表示される)。
  • 画面の描画2
    ダイアログの枠を取っ払って、適当にテキストエリアとかを付けるとそれっぽくなる。っていうか、こういうコントロール類ってダイアログベース*2でいいのか……?

今困ってること

内部で処理を書くときは CString で文字列を扱うんだけど、それを関数に渡す時に char 型だったりするとこまる。だって、プロジェクトで使うのは Unicode なので実質 wchar_t 型になっているから。
こういうノウハウはまったく無いと無駄に時間が掛かるな……(´Д`)
今日(昨日?)はつまずいてしまったけど、最終的にやりたいのは http://msdn2.microsoft.com/ja-jp/library/wa43ek20(VS.80).aspx のメソッドでデータを送りたいのだから、 CString に固執しないようにすれば大丈夫……か?

*1:ActiveXTest ってプロジェクト名なら、デフォルトでは CActiveXTestCtrlと付けられる

*2:ダイアログの上にコントロールを載っていくイメージ