0xc0150002なエラー

続編も書きました.あわせて御確認ください



弊社製作の画像処理系DLL
実装はVC++2005@Visual Studio 2005にて
さくっと,完成,オイラの愛するスタッフちゃんがたむろってる,某所へ納品

その某所では,このDLLを使ってさらに上位アプリケーション開発を行っており

納品後一ヶ月越えて,不具合の話もなく
もう完全に落ち着いたのぉ~などと,高をくくっていた,台湾出張の前日...

オイラのスタッフちゃん

    くまさん!開発環境丸ごと,新しいパソコンに引っ越したら変なエラー出て
    Exeが実行できないんです!!
などと,至急電...

詳しい内容を,オンライン経由で送ってもらったら

Visual Studio2008(現場の開発環境)にて実行すると

    LDR: LdrpWalkImportDescriptor() failed to probe c:\Documents and Settings\hogehoge\ for its manifest, ntstatus 0xc0150002
    デバッガ:: ハンドルされていない続行不可の例外がプロセスの読み込み中にスローされました


なんて,見たこと無いエラーが出て,Exeが起動直後,アボート...

軽く調べてみたけど,原因よくわからず


    とりあえず,台湾から帰ってから!
    それまでは,旧パソコンに環境戻して,現状維持せよ!!
などと,オイラ,バッサリ切り捨てて,台湾へ旅立って 😈




さて,帰国後,調査開始

なんか,マニュフェストが絡んでるとか何とかのエラー?
マニュフェスト??うちの知事の公約じゃろか??@ドゲンカセントイカン

とか,調べていったら...
こちらのページに行き着いて

VC++ 2005のランタイムDLLをEXEに同梱する@イグトランスの頭の中(のかけら)

なんでも,いつの頃から知らないけど
DLL HELL(DLL地獄)
DLLのバージョン不整合によるシステム不具合
を回避するカラクリが導入されたような話

VC++で作成したDLL
単純にエクスプローラでコピペしても,動かなくなってしまったそうで

今回のケースがまったくそう
VC++6時代は,コピペですんでたんで
今回も,作業手順に”本DLLをコピペすると動きますわん”と連絡してしまっており 🙁


この仕様変更,オイラ聞いてないぞぉ~>マイクロソフト 👿


これを回避するためには
インストールプロジェクト辺りをこさえるか

マニュフェストファイル
    Microsoft.VC80.CRT.manifest
    Microsoft.VC80.MFC.manifest
を作成した上で,あ~だこ~だするか
しかなさそうな雰囲気...

上記,
VC++ 2005のランタイムDLLをEXEに同梱する@イグトランスの頭の中(のかけら)

さまのページを参考にあ~だこ~だ,やってみたけど,動かない...

なんか,だんだん,イラッ☆としてきた....

さらに調べていったら...

    コンパイルオプション
    [構成プロパティ][プロジェクトの規定値][MFCの使用]を
    “スタティック・ライブラリーで MFC を使用する”
に変更したらいいらしい

ようは,動的にMFCやらCRTランタイムをリンクするんじゃなく
静的リンクにやるようにオプション変更すればいいそうな
ちょいとDLLがでかくなるけど

この変更
(付随して,C/C++オプションのランタイムライブラリの項目を/MD(/MDd)から/MT(/MTd)に変えないとダメ)
をやって,ビルドかけなおしたら,無事に動きましたわん 😳

exeの起動が,1秒近く遅くなるそうじゃけど
C#やってる身にすりゃ,起動,そんなに変わらんぞ 😎

ってことで,日本語の資料も,わりと少なかったんで
ググって,後から来る方のために,ここに記述しておきますです...


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください