世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2004年11月26日

VC++.NETの属性からIDLへの反映

VC++.NETになって、ソースコード内での__interfaceキーワードによるインターフェース定義やその属性の定義が自動的にIDLに、そしてタイプライブラリに反映されるようになった。(関係ないけど、MIDLにconstメソッドがサポートされたのは喜ばしい)。私としてはIDLを書くのは嫌いじゃないし、やっぱり自由がきくのでいいと思うんだけど。まぁ、最近の流行はこういうやりかたみたい。XDocletは確かに便利だしね。J2SE5.0も属性をサポートしたしね。

ところが、なんだかよく分からないけど、一部のインターフェースがIDLに反映されなくて困った。散々悩んで、実験して、結局よく分からないけどSOAPが関係してるらしい。

  • ソースコードからIDLへの反映は各オブジェクトファイルの.idlsymセクションをマージすることで行われるので、interfaceであれ、coclassであれ、IDLに反映されるには少なくとも1つの翻訳単位に含まれなくてはならない。
  • ところが、その翻訳単位にsproxyが生成したSOAPプロキシヘッダを#includeしていると、この反映が行われない。オブジェクトファイルの解析はしてないけど、.idlsymセクションが作られないのか……。
  • したがって、coclassの実装にsproxyの生成したプロキシを使用する場合、解決策としては
    • IDLを自力で書いて、MIDLに掛けて、tlbをリンクするように設定する。これ、やり方がよく分からなかった。リソースに含まれるんだよね? どこで設定すりゃいいの?
    • IDL生成用の翻訳単位と、実装用の翻訳単位を分ける。生成用翻訳単位では単にインターフェースやcoclassの宣言を#incldueするだけで、何もしない。余計なものも#includeしない。

トラックバック

http://yugui.jp/articles/157/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system