積読日記
Mon, 22 AwGhost 2005 [長年日記]
tDiary 278日目
■ [work] Let's Try ChangeLog Memo
更新履歴で使われる ChangeLog 形式でメモをとろうというお話. 今週から業務の記録をつけるのに使い始めた.
■ [computer] Managed と Unmanaged の狭間で
まずは Unmanaged な C++ で static link なライブラリ (A) を作った. 次に, C# から使えるように, Managed C++ でラッパし, Managed な DLL (B) にした. A に機能追加が必要になったが, .NET framework を使うと楽なので利用した. そうすると A で Managed C++ を使うことになる. ここで A のビルドに成功したものの, B のビルドで A のリンカエラーが発生するようになった. 関数の実体が存在しないらしい. Managed と Unmanaged が捻れて非常に腐った状態なので, 全部 Managed にしてしまえばいいのだが, その前に原因究明. A 内部の Managed でビルドしているクラス (このクラス自体は Managed クラスではない) を, Unmanaged なコードで new するときにコンストラクタの実体が認識できないようだ. Unmaged なテストプログラムから A をリンクするときには, リンカエラーは出ない事も判明した. Managed - Unmanaged - Managed というサンドイッチがダメで, Unmanaged - Unmanaged - Managed ならよいということか. C/C++ で関数名の内部表現が異なるのと同様のことが起きているのかな. extern "C" のような感じでスマートに解決できないやろか. 設計をスマートにする方が先か.