35074


「Microsoft Visual Studio Express 2015 for Windows
Desktop」を使って、C++でDLLを作成致しました。  
基本的には正常に動作するのですが、古いPCですと以下のようなエラーが出てしまい、起動できません。

[code]

    コンピューターにapi-ms-win-crt-runtime-l1-1-0.dllがないため、プログラムを開始できません。
    
[/code]

調べてみた所、以下のサイトに解決策が載っており、「Visual Studio 2015 の Visual C++
再頒布可能パッケージ」をインストールすることで解決できることを確認いたしました。

[Windowsでプログラムを起動したら「api-ms-win-crt-
runtime-l1-1-0.dll」ないと起こられた時の対処方法](http://www.softantenna.com/wp/windows/api-
ms-win-crt-runtime-l1-1-0-dll/)

とはいえ、ユーザにインストールさせるのもできれば避けたいので、はじめから正常に動作するDLLを作成したいと思っております。  
どんなPC（OSはwindows）でも動くDLLを作成するためにはどうすればよろしいでしょうか。  
以上、よろしくお願いします。


CC BY-SA 4.0
2017-05-27T15:00:05.913
35073
2023-02-09T07:11:56.953
2023-02-09T07:11:56.953
3060
23065
question
c++ windows dll
古いPCでも動作するDLLの作成方法について


MSVC2015からランタイムライブラリの構成が大幅に変更されてたくさんのDLLが必要です。  
MSVC2013以前ならスタティックリンクすれば、配布に必要なDLLを最低限まで減らすことができます。


CC BY-SA 3.0
2017-05-27T15:06:35.710
35074
2017-05-27T15:06:35.710
3337
35073
answer


> どんなPC（OSはwindows）でも動くDLLを作成するためにはどうすればよろしいでしょうか。

「どんなPC（OSはwindows）でも動くDLL」と言われても限度があると思います。どの辺りをお考えでしょうか？
既にスタティックリンクで解決済みとなってはいますが、例えばそのままではWindows xpで動作しません。

### Windows 10を対象とする場合

Windows 10にはVC++2015・VC++2017のランタイムライブラリが標準でインストールされています。ダイナミックリンクしていても動作します。

### Windows 7以降を対象とする場合

Windows Updateで2017/04/11以降に配布されている[KB4015549
月例のロールアップ](https://support.microsoft.com/ja-jp/help/4015549/windows-7-windows-
server-2008-r2-sp1-update-
kb4015549)にはVC++2015・VC++2017のランタイムライブラリが含まれています。これが適用されていればダイナミックリンクしていても動作します。

ただし、推奨される更新プログラムを適用していないPCには含まれていません。個人的には「Windows
Updateで配布されている推奨される更新プログラムも適用してください」と案内するのも一つの手かと思います。

### Windows Vista以降を対象とする場合

ランタイムライブラリをインストールするかスタティックリンクする必要があります。

### Windows xp以降を対象とする場合

VC++2012以降は既定でWindows Vista以降をターゲットとしているため、Windows
xpを対象とするためには[プラットフォームツールセット](https://msdn.microsoft.com/ja-
jp/library/jj851139.aspx)を **Visual Studio 2015 - Windows XP (v140_xp)**
等のXPをサポートするものへ変更する必要があります。  
もちろん、ランタイムライブラリをインストールするかスタティックリンクが必要です。

* * *

それとは別に[VC++2012以降は既定でPenitum 4以降をターゲット](https://msdn.microsoft.com/ja-
jp/library/bb531344\(v=vs.110\).aspx)としています。Pentium
IIIなどそれ以前のプロセッサーで動作させるためにはコンパイルオプション`/arch:IA32`を指定する必要があります。


CC BY-SA 3.0
2017-05-28T11:34:08.517
35093
2017-05-28T11:34:08.517
4236
35073
answer


api-ms-win-crt-runtime-l1-1-0.dll が必要という事なので、/CLRオプションが有効なのだと思われます。

全般/共通言語ランタイムサポート：共通言語ランタイムサポートを使用しない  
全般/プラットフォームツールセット：Visual Studio 2015(v140_xp)  
にした上で  
C++/コード生成：マルチスレッド(/MT)

にすれば XPでRuntime無しで動くバイナリが生成可能です


CC BY-SA 4.0
2023-02-09T06:23:46.867
93777
2023-02-09T06:23:46.867
57005
35073
answer