【MFC】mfc100u.dll / mfc100.dll が見つからない:VC++ 2010 再頒布パッケージの特定と、/MT で依存を外す

【MFC】mfc100u.dll / mfc100.dll が見つからない:VC++ 2010 再頒布パッケージの特定と、/MT で依存を外す

MFC アプリを配布先の PC で起動したとき、「mfc100u.dll が見つからないため、コードの実行を続行できません」あるいは mfc100.dll のダイアログで止まる。必要なのは Visual C++ 2010 の再頒布可能パッケージです。よくある行き止まりは、新しい「2015-2022」や 2012 / 2013 を入れても mfc100 系は直らないこと。2010 のランタイムは別系列で、専用パッケージが要ります。

mfc100u.dll が見つからないため、コードの実行を続行できません。
プログラムを再インストールすると、この問題が解決する場合があります。

この記事は mfc100.dll / mfc100u.dll に絞ります。末尾 u(Unicode 版)の意味、入れるパッケージのビット選び、そして DLL を持ち歩きたくないときの静的リンク(/MT)まで扱います。

出ている DLL 名読む記事
mfc100.dll / mfc100u.dll だけ直したいこの記事:VC++ 2010 専用の手順
mfc120.dll / mfc120u.dllVC++ 2013 の再頒布パッケージの特定と導入
mfc140.dll など複数世代を DLL 名から判別したいDLL名から再配布パッケージを特定する早見表

目次

mfc100 は VC++ 2010、末尾 u は Unicode 版

先頭の mfc100 は MFC のバージョン 10.0=Visual C++ 2010 / Visual Studio 2010 世代を表します。末尾の u は Unicode ビルドです。Microsoft の MFC Library Versions の命名規則で、MFCversion.DLL が ANSI/MBCS 版、MFCversionU.DLL が Unicode 版です。

DLL 名文字セット備考
mfc100u.dllUnicode近年の既定。実際に出るのはこれが多い
mfc100.dllANSI / MBCS文字セットが「マルチバイト」の古い設定
mfc100ud.dll / mfc100d.dll—(末尾 d)Debug 版。再頒布不可

mfc100u.dllmfc100.dll のどちらが出ても、入れるパッケージは同じ VC++ 2010 で直ります。名前を読む意味は、末尾に d が付いていないかを見るためです。mfc100ud.dllmfc100d.dll が出ているなら、配ったのが Debug ビルドです。Debug 版 DLL は再頒布できないので、その場合は Release でビルドし直すのが先です。

注意したいのはここです。Visual Studio 2026 などに付いてくる「Visual C++ 2015-2022 再頒布可能パッケージ」を入れても、mfc100 系は解決しません。2012 や 2013 でも同じで、2010 のランタイムはそれぞれ別系列として配布されています。世代を取り違えると、いくら入れ直しても「見つからない」が消えません。

検証環境:Visual Studio 2026(Debug / x64。対象ランタイムは Visual C++ 2010)


手順1:x86 か x64 か(OS ではなくアプリのビット数)

VC++ 2010 の再頒布パッケージは x86(32bit)と x64(64bit)に分かれています。合わせるのは OS のビット数ではなく、mfc100u.dll を要求している実行ファイルのビット数です。64bit の Windows でも、32bit アプリには x86 版が要ります。

  • ソースがあるなら、Visual Studio の構成プラットフォームを見ます。Win32 なら x86、x64 なら x64 です。
  • exe しかないなら、配布元の動作環境やダウンロード名で確認します。迷ったら x86 / x64 の両方を入れて構いません。

手順2:VC++ 2010 SP1 再頒布可能パッケージを入れる

mfc100u.dll / mfc100.dll は、Microsoft の Visual C++ 2010 SP1 再頒布可能パッケージ(MFC セキュリティ更新) に含まれます。手順1で確認したビット数に合わせて、32bit アプリなら vcredist_x86.exe、64bit アプリなら vcredist_x64.exe を、エラーが出ている PC で実行します。入れ終わったらアプリを起動し直して確認します。


DLL を持ち歩きたくないなら /MT で依存を外す

配布のたびに再頒布パッケージを入れて回るのが面倒なら、MFC を静的リンクして DLL への依存自体をなくす手があります。プロジェクトのプロパティで「全般」→「MFC の使用」を「スタティック ライブラリで MFC を使用する」(/MT)に変えると、MFC が exe に取り込まれ、mfc100u.dll を持ち歩く必要がなくなります。

効き目は自プロセスにロードされている MFC DLL を数えれば分かります。共有 DLL 版(/MD)の exe を Visual Studio 2026 の Debug / x64 で実行すると、次の1件が出ました。

ロード済み MFC DLL(1件)
  C:\WINDOWS\SYSTEM32\mfc140ud.dll

共有 DLL 版は実行時に mfc<ver>u.dll へ動的依存します。この検証は Visual Studio 2026(v14x ツールセット)なので、名前は mfc140ud.dll(Debug 版で末尾 d)でした。Visual Studio 2010 で同じ構成をビルドすれば、同じ規則で mfc100u.dll に依存します。/MT に切り替えると、この列挙に MFC DLL は現れなくなります。手元で依存名だけ見たいときは、開発者コマンドプロンプトの dumpbin /dependents アプリ名.exe でも確認できます。

ただし静的リンクは万能ではありません。Microsoft の Redistribute the MFC Library では、社内配布やテストには使えるものの、外部への再頒布の手段としては推奨しないと明記されています。外に配る本番ビルドは、再頒布可能パッケージを入れる方が公式の道です。


「見つからない」ではなく 0xc000007b になるとき

DLL が無いときは「mfc100u.dll が見つからない」と名指しで出ます。一方、DLL はあるのにビット数が食い違うと、名前ではなく 0xc000007bSTATUS_INVALID_IMAGE_FORMAT)で止まります。32bit アプリの隣に 64bit の DLL がある、といった状態です。名指しが出ているなら本記事の手順、0xc000007b なら「0xc000007b でアプリが起動しない」を見てください。


まとめ

  • mfc100 は VC++ 2010 世代、末尾 u は Unicode 版。どちらも VC++ 2010 SP1 再頒布可能パッケージで直る。
  • 2012 / 2013 / 2015-2022 を入れても直らない。2010 専用パッケージが要る。
  • 合わせるのは OS ではなくアプリのビット数。迷ったら x86 / x64 の両方。
  • 配布を身軽にするなら /MT で依存を外せる。ただし外部配布の公式手段は再頒布可能パッケージ。
  • 末尾 d(Debug 版)は再頒布不可。名指しでなく 0xc000007b ならビット不一致を疑う。
目次