2012年5月11日金曜日

メタセコイアプラグインをC++/CLIで作るときの注意点


メタセコイアのプラグインを自作しようとSDKを弄り中。
私が作ろうとしてるプラグインはパラメータ画面が複雑なため、Win32+WTLではなく
クラスライブラリが充実してる.NETで作りたいところ。
そこでプラグインDLLはC++/CLIで作って画面はC#で作って呼び出すことにしました。

メタセコSDKのサンプルをマネージ混在モードに切り替えてビルドしてみました。
ビルドは成功し、出来上がったDLLをメタセコへインストール・・・としてたところで見事にフリーズ、「DllMainでマネージドコードは呼んじゃだめよ」というエラーが発生しました。

調べてみるとDllMain関数をネイティブコードで生成していなかったのが原因でした。
#pragma unmanagedでネイティブコードを指定してやれば無事メタセコからロードできました。

#pragma unmanaged
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
)
{
    return TRUE;
}
#pragma managed


0 件のコメント:

コメントを投稿