メタセコイアプラグインSDKで.NETライブラリ使いたい設定
新年、あけましておめでとうござ (語るに落ちる…ッ!!)
久しぶりにメタセコのプラグイン作ってみたくなったのでメモ。VC++2010からtr1採用なので、2010を使えば公式のSDKそのままでも結構作りやすいとは思います。でもせっかくなら.NETライブラリも使いたいもの。で、案の定プロジェクト設定とかで迷走。しかしどうやらこれで動かせるっぽいですよ。(ちなみにプラグインSDKはちょっと古くてmqsdk300を使用)
- ダウンロードしたSDKのソリューションファイル(*.sln)をVCで開き、自動変換する。
- プロジェクト設定を以下のように修正
操作 値 構成プロパティ>全般>共通言語ランタイムサポート 選択 共通言語ランタイムサポート(/clr) 構成プロパティ>C/C++>全般>デバッグ情報の形式 選択 C7互換(/Z7) 構成プロパティ>C/C++>コード生成>基本ランタイムチェック 選択 既定 構成プロパティ>C/C++>コード生成>ランタイムライブラリ 選択 マルチスレッドDLL(/MD)または
マルチスレッドデバッグDLL(/MDd)構成プロパティ>リンカー>入力>シンボル参照の強制 手打ちで追加 __DllMainCRTStartup@12 構成プロパティ>リンカー>コマンドライン>追加オプション 手打ちで追加 /NOENTRY
後は必要なライブラリを参照に追加していけば使えるはず。ただDllMain上でインスタンス確保を伴う処理は禁止。いかにもありそうな話ですが、DllMain処理と.NetライブラリおよびマネージドC++初期処理とは、別系統に分かれていて互いに排他的なロックを伴いつつ同時進行もするため、DllMain側からマネージドコードの呼出を行うとデッドロックするっぽいです。この抜け道はMSDNの混成アセンブリの初期化を参照してください。
InteliSense: 'C++/CLIで使用できません'
おお入力補完よ 死んでしまうとはなさけない