タグ付けされた質問 「dll」

ダイナミックリンクライブラリ(DLL)は、別のモジュール(アプリケーションまたはDLL)で使用できる関数とデータを含むモジュールです。これは、Microsoft WindowsおよびOS / 2オペレーティングシステムにおける共有ライブラリの概念のMicrosoftによる実装です。

3
Windowsでは__cdeclまたは__stdcall?
私は現在、DLLとして配布されるWindows用のC ++ライブラリを開発しています。私の目標は、バイナリの相互運用性を最大化することです。より正確には、DLLの関数は、DLLを再コンパイルしなくても、MSVC ++とMinGWの複数のバージョンでコンパイルされたコードから使用できる必要があります。ただし、どの呼び出し規約が最適cdeclか、またはについて混乱していstdcallます。 「コンパイラ間で同じであることが保証されているのはC呼び出し規約だけです」などのステートメントを聞くことがありますcdecl。これは、「の解釈には、特に値を返す方法にいくつかのバリエーションがあります」などのステートメントとは対照的です。これは、特定のライブラリ開発者(libsndfileなど)が配布するDLLでC呼び出し規約を使用することを、目に見える問題なしに阻止するようには見えません。 一方、stdcall呼び出し規約は明確に定義されているようです。私が聞いたところによると、これはWin32とCOMで使用される規則であるため、すべてのWindowsコンパイラは基本的にそれに従う必要があります。これは、Win32 / COMをサポートしていないWindowsコンパイラはあまり役に立たないという仮定に基づいています。フォーラムに投稿された多くのコードスニペットは関数を宣言していますがstdcall、理由を明確に説明する単一の投稿を見つけることができないようです。 矛盾する情報が多すぎて、実行する検索ごとに異なる回答が得られるため、2つを判断するのに役立ちません。なぜどちらかを選択する必要があるのか​​(または2つが同等である理由)について、明確で詳細な議論のある説明を探しています。 ほとんどのクライアントコードは、「インターフェース」、純粋仮想クラス(次のパターンは、例えば説明を通じて、私のDLLとのインタフェースになるので、この質問は、「古典的な」機能に、だけでなく、仮想メンバ関数の呼び出しに適用されるだけでなく、注意こことそこ)。

5
静的ライブラリ、静的にリンクされたダイナミックライブラリ、動的にリンクされたダイナミックライブラリの.libファイルには何が含まれていますか?
静的ライブラリ、静的にリンクされたダイナミックライブラリ、動的にリンクされたダイナミックライブラリの.libファイルには何が含まれていますか? 動的にリンクされたダイナミックライブラリに.libファイルが必要ないのはなぜですか。また、静的リンクでは、.libファイルはすべてのメソッドを含む.objファイルにすぎません。あれは正しいですか?

3
同じソリューションで2つの異なるバージョンのlog4netを参照する
log4net1.2.10.0を参照しているNHibernate2.1.2.400を使用しています。同じプロジェクトで、単純なアカウンティングSDKも使用していますが、残念ながら、まだlog4net1.2.9.0を使用しています。 したがって、log4net 1.2.10.0を参照すれば、NHibernateを機能させることができますが、simplySDKは機能しません。およびその逆... 問題のほとんどは、log4netがアセンブリキーを変更したことに起因していると思います。バインディングリダイレクトを使用しようとしましたが成功しませんでした。2つのDLLに同じキーがありません。 NHibernateを再コンパイルしてlog4net1.2.9.0を使用することを検討していますが、それは間違っているように思われます。SimplyAccountingはSDKを更新してlog4net1.2.10.0を使用する予定はありません。 これを処理するための最良の方法は何ですか?解決することは可能ですか?
80 .net  nhibernate  dll  log4net 

1
C ++ 17での初期化後にインライン変数を変更できますか?
私のシナリオは以下です(それはclangでは機能しましたがgccでは機能しませんでした) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp:(dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); 問題は、インライン変数が実行時にすでに変更されていたため、28を期待した場所でインライン変数が0を示していたことです。MSVCはこれに同意しませんが、clangは私が期待することを行います。 問題は、私のシナリオでは、実行時にインライン変数を変更できるかどうかです。(変数をインライン展開することで問題を解決しました。)
11 c++  visual-c++  dll  clang  c++17 

1
WindowsでCMakeを構成し、コマンドラインからclangを使用して最新のOpenMPサポートを取得する
並列化にOpenMPを使用する小さなテストプロジェクトがあります。私の目標は、OpenMP 4.5以降のサポートを備えたライブラリ(これらのタイプを使用して配布された外部ライブラリへの実際のプロジェクトリンクのため)を生成.dllし.libてライブラリ用にコンパイルし、コマンドラインから実行して、Dockerで実行できるようにすることですテストとチェック(Dockerの部分はこの質問の範囲外です。これは、コマンドラインから機能させる必要がある理由の参考に過ぎません)。私はこのプロジェクトを別のコンパイラーでコンパイルできますが、満足できないものがあります。 MSVC:、mkdir build-msvc次にcmake ..(新しく作成されたフォルダーから)、最後にcmake --build . --config Release。これは問題なくコンパイルできますが、OpenMP 2.0のみをサポートしているため、実際のプロジェクトには適していません。 Intel Parallel Studio:、mkdir build-intel次にcmake .. -T "Intel C++ Compiler 19.0"(新しく作成されたフォルダーから)、最後にcmake --build . --config Release。これはOpenMP 5.0をサポートしていますが、そのライセンスは私にとってかなり高価です。 MinGW x64 g ++:、mkdir build-g++次にcmake .. -G "MinGW Makefiles"(新しく作成されたフォルダーから)、最後にcmake --build .。これはOpenMP 4.5をサポートしていますが、このコンパイラーは.lib(私が知る限り)互換性がなく、すでに述べたように必要です。 私は成功せずにclangを使用しようとしました: MSVCからのCLANG:、mkdir build-clang-msvc次にcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..(新しく作成されたフォルダーから)、次のエラーで失敗します。 -CXXコンパイラIDは、MSVCに似たコマンドラインを備えたClang 8.0.1です。 -動作するCXXコンパイラを確認します:C:/ Program Files(x86)/ Microsoft …

1
NuGetパッケージをインストールするときに、これらの.dllの追加を回避できますか?
私は私のものと同様にこの提案された質問を読むことから始めましたが、解決策はありませんでした: MSTest.TestAdapterがなぜそのDLLをNuGetパッケージに追加するのですか? 問題の簡単な説明 NuGetパッケージを作成し、インストールするたびにNUnit、NUnit3TestAdapter .dllさんは、私がインストールプロジェクトに追加されます。この問題を解決する解決策を見つけたいです。 再現手順 私が説明している問題を再現する2つのgitリポジトリをプッシュしました。 ClientLibrary/ MainFramework(NuGetパッケージを生成したプロジェクト)-https ://github.com/harbourc/client-library-repro-nuget-issue TargetProject(パッケージがインストールされるプロジェクト)-https://github.com/harbourc/target-project-repro-nuget-issue 両方のリポジトリのクローンを作成し、NuGetパッケージを復元して、次のように問題を再現できます。 client-library-repro-nuget-issue / ClientLibrary /でClientLibrary.1.0.0.nupkgを見つけます target-project-repro-nuget-issueのパッケージマネージャーコンソールを開いて実行する Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg 注意NUnitとNUnit3TestAdapter .dllに追加されているのTargetProjectにもかかわらず- TargetProjectすでに持っているNUnitとNUnit3TestAdapterインストールされています。 より長い概要 と呼ばれる内部使用のために独自のNuGetパッケージを作成しました。ClientLibraryそれをと呼ばれる別のプロジェクトにインストールしようとしていTargetProjectます。これは構造の簡単な内訳です​​: FullSolution.sln MainFramework.csproj ClientLibrary.csproj-> .nupkgこれから生成 別のプロジェクト: TargetProject.sln TargetProject.csproj-> .nupkgこれにインストール ClientLibraryへの参照がありMainFramework、からの多くのメソッドを使用しMainFrameworkます。 にインストールClientLibrary.1.0.0.nupkgするTargetProjectと、次.dllのものがに追加されTargetProjectます。 nunit.engine.api.dll nunit.engine.dll NUnit3.TestAdapter.dll NUnit3.TestAdapter.pdb これらを削除すると.dll、すべてが正常に機能します。TargetProjectすでにこれらのパッケージがインストールされているます。それらは必要ではなく、インストール時にそれらを削除しなければならないのは面倒です。 ここに私がClientLibraryNuGetパッケージを追加する方法がありますTargetProject: ビルドClientLibraryしてMainFrameworkプロジェクトを作成して.dllを生成する ディレクトリをClientLibraryフォルダーに変更して実行しますnuget spec .nuspec ファイルが生成されます: <?xml version="1.0"?> <package > <metadata> …
10 c#  .net  dll  nuget 

2
C ++でソリューションをビルドした後、VCRUNTIME140_1.dllが見つからない
小さなテキストアドベンチャーを作成しました。リリースとx64設定を使用してVisual Studio Community 2019でソリューションを構築しました。* .exeファイルを他の生成されたファイルと共に圧縮して、VSがインストールされていない別のPCに送信したところ、イメージに表示されるエラーが発生しました。私は自分のPCを検索しましたが、ファイルはいくつかの異なるフォルダーに存在し、そのうちの1つはsystem32なので、新しいPCのどこにファイルを配置するのかわかりません。 任意の助けいただければ幸いです。ありがとうございました
10 c++  dll 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.