Windows10のVisual studioでDLLを開発しています。
今まで、VS2015で開発していたのですが、VS2017にバージョンアップしました。
すると、VS2015で作成していたものは、正常に動作していたDLLが、VS2017に移植したDLLが動作しなくなりました。
その原因が分からないのですが、
VS2015で作成していたDLLのサイズはDebug版で12MBありました。
ところが、VS2017で作成したDLLのサイズが2MBしかありません。
この為に、動作しなくなったと考えられるのですが、
VS2017でDLLがうまくリンクされていなくて、サイズが極端に小さくなってしまったのだと思います。
サイズが小さくなってしまった原因として考えられることは、
何があるでしょうか?
以上。ご教授下さい。
まずはなぜ動作しないのかを追求することではないですか?
わざわざアカの他人に聞く意味がわかりませんが
作成しているのは、CADのアドオンのDLLです。
CAD本体のバージョンアップに伴い、アドオンのDLLもVS2017にバージョンアップしなければならなくなりました。
それで、VS2017に移植したのですが、サイズが極端に小さくなって、CAD本体がアドオンと認識してくれなくなりました。
それで、サイズが小さくなった原因を知りたいのです。
とりあえず、DependencyWalker や Dependencies で dll の依存ファイルを調べてみれば何かわかるのでは?
「DependencyWalker」
https://www.dependencywalker.com/
「Dependencies」
https://lucasg.github.io/Dependencies/
サイズに関しては static か shared かが絡んでる気がするけど、なんか調整がいるんじゃないスか?
Win32ネイティブのDLLですか? .NETアセンブリではないのですよね。リリースビルドにしていて小さくなってしまったなどと言うことはありませんか。
前はデバッグビルドでビルドしていたのでデバッグ情報も含め、サイズが大きかった >>> 今回、VS2017に移行して、勢い余ってリリースビルドでビルドしてしまったが、デバッグ情報が削除された上にさらにコードも最適化され、サイズが極端に小さくなった。おまけにコードが最適化されたが故に潜在的なコードの問題が顕在化して、動かなくなってしまった。
...と言うケースはよくあります。
Win32ネイティブのDLLです。記述したサイズはいずれもデバッグ版の数値です。
では、デバッグシンボル情報が欠けていたりするのではありませんか。通常、リンクに失敗すればDLLファイルは作成されません。もしくはファイルは存在するけど、ビルドの途中で失敗していて本当に壊れてしまっているとか。ビルド時のメッセージを確認してみてください。dumpbin.exe などで検証できるファイルになっているのか、あるいは先にコメントいただいているように、Dependency Walkerが通るファイルになっているか試してみるとか。
いずれにせよ今のご質問内容では情報が少なく、(私も含めて)回答は手探り状態だと思います。
ファイルサイズが小さくなったから動かなくなったのではなく、動かないDLLファイルのいち側面としてみたら、VS2015ビルド時のものより極端にサイズが小さかった、と言うことだけなのです。一般的に考えて、動かなくなった原因は別のところにあります。(動いているんだけど、前のものよりファイルサイズが極端に小さい。それは何故ですか?と言う質問であれば成り立ちますが、そうではありません)
(先のtakasima20さんのコメント内容に絡んで)ビルドしているPCと、試すためにCADを動作させているPCが違っていたりしませんか。VCランタイムライブラリDLLのインストール状況のせいもあるかもしれません。ランタイムライブラリのスタティックリンク、ダイナミックリンクの設定に影響するはずです。
DependencyWalkerで調べてみたのですが
API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL
などの、API-MS-WIN-CORExxxxxのファイルが見つからない
というエラーが出ていました。
どこか、プロジェクトの設定の問題でしょうか?
構成プロパティの「全般」→「プラットフォームツールセット」はどうなっていますか?
Visual Studio 2017(V141)
となっています。
うーむ、ここがバージョンアップされていないのかなと思いましたが違ったようです。
API-MS-WIN- のほかに足りないものはありませんでしたか?
DG.DLL
GSROOT.DLL
GSUTILS.DLL
INPUTOUTPUT.DLL
VECTORIMAGE.DLL
等も、見つからないといっています。
それらの DLL は CAD の関連ではないですか?
必要なものがインストールされていないのでは?
確かにそうですね。
この関係で、API-MS-WIN-も関係するでしょうか?
API-MS-WIN 等は関係ないようです。
https://stackoverflow.com/questions/36240215/dependency-walker-missing-dlls
Dependencies で調べたほうがよかったかも。
あなたの回答
tips
プレビュー