C++/CLIとC++ネイティブのlibをリンクさせて、Windowsフォームアプリケーションを作ったときに、
よくわからないエラーが発生してしまうことがある。
よくわからないエラーが発生してしまうことがある。
Expression: _CrtIsValidHeapPointer(pUserData)
どうやらCRT初期化の順序に問題があるのか。
これを解決するには、エントリポイントの修正を行えば解決する模様。
次のエントリポイントに設定させてあげれば問題解決できた。
?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z
ずいぶんと前にわかっていて、日記に書いたと思ったのに忘れていたので、
今更ながら追加。
■上記の発生条件
どうやらグローバルなコンストラクタが実行されるときに何かがあるらしい。
C++のclassメンバにstaticなデータがある場合に発生する。
また、それが組み込み型(プリミティブ型)ならば問題なく動くが、
自分で作成したクラス型だと実行時エラーの引き金となる。
*追記1
コンストラクタやデストラクタを備えるクラスだとアウトっぽい。
そのクラスがプリミティブ型しか保持していないとしても。
*追記2
どうやらコンストラクタがあることが問題ではないらしい。
デストラクタがあることが問題のようだ.
デストラクタのあるクラス型で、クラスstaticメンバを持つと、このエラーが発生する。
こういったクラス構造をどこかで持ってしまうと、C++/CLIで実行時エラーとなる.