wipiBinMaker can't open dll

WIPIのBinary makerが突然


C:\Program Files\WIPI SDK\Projects\MogeMogePrj\Debug\MogeMogePrj.dll : can't open dll


とかいうダイアログを出して動作しなくなったので理由を探った。
1) 新しくプロジェクトを作って、動作するかチェック………OK
2) DLLのサイズが大きすぎないか調べる………前にテストしたプログラムで今の状態(340K)よりもずっと大きい900K超えのDLLでもちゃんとBinMakerが受け付ける
3) DLLの公開関数がC++のマングリング等の影響を受けていないかチェック………問題なし


というところで「ふーむ」となったのだが、
ちょっとテストと思って新規に作ったプロジェクトファイル内に
static char testArray[1024 * 1024 * 256];
とか書いてみた。
こうするとビルド時に既に
warning LNK4084: トータル イメージ サイズ xxxxxxx が最大値 (268435456) を越えています; イメージは動作しない可能性があります
とか警告が出る。
しかし、これをBinMakerにかけてもちゃんと受け入れるし………。
以下これのテスト結果

// static char testArray[1024 * 1024 * 256]; - 警告が出る. しかしBinMakerは動作する
// static char testArray[1024 * 1024 * 512]; - 警告が出る. しかしBinMakerは動作する
// static char testArray[1024 * 1024 * 1024]; - 警告が出る. BinMakerも失敗する


やっぱりこれが怪しいなぁと思って、問題のもとのプロジェクトに戻る。
上記のテストでstatic変数やグローバル変数がでかすぎると問題なのが判明しているので、
一番でかいと思われるグローバル変数
GLOCHAN g_GanGro;
みたいなのから
GLOCHAN& g_GanGro = *(GLOCHAN*)NULL;
として一時的に騙まし討ちにする^^;


すると、BinMakerが受け入れるではないか!!(もちろん実行時には不正な参照を使ってしまうので実行すれば落ちる)
やっぱりこれが問題だったらしい--;


しかしリンカが警告を出してくれる状況でもBinMakerが動作したり、
今回の問題の場合のように、リンカが警告を出さないのにBinMakerが失敗するという場合もあるようで…………