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.dll | VC++ 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.dll | Unicode | 近年の既定。実際に出るのはこれが多い |
mfc100.dll | ANSI / MBCS | 文字セットが「マルチバイト」の古い設定 |
mfc100ud.dll / mfc100d.dll | —(末尾 d) | Debug 版。再頒布不可 |
mfc100u.dll と mfc100.dll のどちらが出ても、入れるパッケージは同じ VC++ 2010 で直ります。名前を読む意味は、末尾に d が付いていないかを見るためです。mfc100ud.dll や mfc100d.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 はあるのにビット数が食い違うと、名前ではなく 0xc000007b(STATUS_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ならビット不一致を疑う。
