問題タブ [declspec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ __declspec( dllexport ) 関数がインスタンス変数にアクセスできない
(Windows/VS 2010 上で) DLL としてエクスポートすることにより、一部の C++ コードを保護しようとしています。
以下の例でvar
は、スーパークラス コンストラクターで設定されており、デバッガーは、それがsomethingを参照するように確実に設定されていることを示しています。
Test は、Test クラスが含まれている DLL を使用するコードで構築されます。
ただしgo
、テストのインスタンスから呼び出される場合 (DLL から呼び出されますが、呼び出し元のメソッドは DLL コンシューマーによって呼び出されます)var
は null ポインターです (値は 0)。
実際のコードを共有することは許可されていないため、これは単純化したものです。
消費コードでは、ヘッダーは
実際のコードはもっと複雑ですが、dllexport を使用したインスタンス変数に既知の制限があるかどうか、または Test の null ポインターでメソッドを呼び出している可能性が高いかどうかを誰かに教えていただければ幸いです。おそらく、dllexport と継承の問題です。このコードは、消費者コードを分割する前に機能し、DLL コードは同じプロジェクトにありました。分割してから壊れただけで、消費者が使用するヘッダーの 2 番目のセットに公開したい dllexporting/dllimporting 関数です。
c++ - GUID の説明 - C++
Windows のサンプルを使用して DirectShow を学習します。クラスでは、ヘッダー ファイルに次のコードがあります。
そして、cpp ファイルの次の行:
すべてがどのように連携するのか説明してもらえますか?
どうもありがとうございます。
c - ピグマリオン変換: 「extern "C" __declspec(dllexport)」の代わりに「#define DLL」を使用
洗練された #define を使用して、見苦しい ""extern \"C\" __declspec(dllexport)" を単一の魅惑的な用語 "DLL" に変換する方法はありますか?
つまり:
もちろん、問題は C の周りに埋め込まれた引用符です。
visual-c++ - dllimportの必要性は何ですか?
私はDLLをよりよく理解するために、DLLで遊んでいます。Add
そこで、、、Sub
およびへの関数を持つ単純なdll(ロード時のダイナミックリンクを使用)を作成しましたMul
。__declspec(dllexport)
関数宣言に使用したdllのヘッダーファイル。
実行可能ファイルについては、dllをコンパイルした後に作成された.libをプロパティに追加しました(リンク用)。その後、をAdd
使用せずに関数を直接呼び出しました__declspec(dllimport)
。プログラムは機能しました。次に、呼び出し元の関数を変更する__declspec(dllimport) (Add)
と、プログラムは再び機能しました。
何が必要なのかわからないの__declspec(dllimport)
ですか?ランタイムリンクDLLはまだコーディングしていませんが、これまでに見た例から、その場合もdllimportは必要ありません。
ご協力いただきありがとうございます。
c++ - __declspec(dllimport) により、MSVC 2010 でコンパイラがクラッシュする
*.cpp ファイルで、サード パーティのライブラリを使用しようとしています。
別:
マクロを削除して #define をすべて一緒に実行し、サードパーティのファイルを手動で編集して __declspec(dllimport) を含めるかどうかを指定することで結果を再現できます。
誰かが似たようなものに出くわしたり、原因を示唆したりできますか? (これは CMake を使用して作成されます)。上記はクラッシュする 2 行の *.cpp の実際の例であり、#include 内の何かに絞り込まれます。
以下も正常に動作します。
- ライブラリのせいではないように、dllimport/export を使用するサード パーティ (彼らは *.sln を提供します) によって提供された例をコンパイルします。
- 本番プロジェクトの一部としてサードパーティの lib をコンパイルします (したがって、dllexport は正常に動作します)。
2 つのプロジェクトのプロジェクト設定ページを調べて違いを見つけようとしましたが、何も表示されませんでした。もちろん、これらの設定ページはナビゲートするのが最も簡単ではないため、何かが欠けている可能性があります. 1日かそこらでVS2008にアクセスできるようになるので、それと比較できます。サードパーティ ライブラリは MySql++ です。
visual-studio-2010 - シンボルが DLL にエクスポートされない
VS2010 内で次の 2 つの手順で DLL を生成しています。
最初に、関数が __declspec(dllexport) として定義されている静的 .LIB ファイルが生成されます。次に、その .LIB ファイルにリンクする DLL が生成されます。この結果の DLL には、.LIB からエクスポートされた関数が含まれていません。
これを引き起こす可能性のあるアイデアはありますか?
また、オプション /EXPORT:funcname をライブラリ プロジェクト設定に追加しようとしました。そして、生成された.LIBファイル自体をチェックしましたが、関数はexportetではありません(ただし、ライブラリのエクスポートをチェックするために使用するツールについては100%確信が持てません...)
ありがとう!
c++ - 複数の宣言の場合は__declspec(align)
非常に単純な質問で申し訳ありませんが、グーグル可能な答えを見つけることができませんでした。
この宣言構文は次のとおりです。
これに相当します:
または、後者の構文では最初の変数のみが整列されますか?
重要な場合、これらはグローバルメソッド内のローカル変数です。
visual-studio-2010 - ブーストメンバーを備えたC2487
プロジェクトを静的ライブラリからサブプロジェクトの共有ライブラリに再編成しようとしています。
さて、VS Compiler を使用すると、すべてのエクスポート クラスに_ declspec(dllexport)が必要であり、インポートには _ declspec(dllexport) が必要です。_declspec(dllimport) . 正常に動作します。しかし、boost メンバーから派生したすべてのクラス (singleton や ptr_map など) で問題が発生しました。
エラーが発生します
エラー C2487: 'boost::serialization::singleton::instance': dll インターフェイス クラスのメンバーが dll インターフェイスで宣言されていない可能性があります
ブーストコードを変更することはおそらく良い考えではないため、 Microsoftのソリューションはあまり役に立ちません;)
ブースト派生クラスをエクスポートするのは良い考えではありませんか? これがどこから来たのか、または修正方法を知っている人はいますか?
(以下のサンプルコード)
ありがとう!
以下にサンプルを示します (「myLib」という名前の共有ライブラリ プロジェクトとしての mylib.h):
それは実装です(myLib.cpp)
簡単な main.cpp (実行可能プロジェクトとして)
いくつかのポイント:
- VS2010
- x64
- ブースト1.52
visual-c++ - .lib の dllexport 関数が DLL からエクスポートされないようにする
スタティック ライブラリにコンパイルした axtls ライブラリのコピーがあります。作成中の DLL にリンクしていますが、一部の axtls 関数 ( _MD5_Final
、_MD5_Init
および_MD5_Update
) が DLL からエクスポートされているようです。どうすればそうならないようにできるかを考えています。
私の DLL は.def
、これらの関数のいずれもリストされていないファイルで構築されています。ただし、それらはすべて__declspec(dllexport)
axtls 自体のように宣言されているため、エクスポートされていると思われます。
.def
ファイルなどを使用して、これらの関数のエクスポートをブロックする方法があるかどうか疑問に思っていましたか? 私の DLL はパブリック SDK の一部として使用される予定なので、このように内部関数を公開するのは特に適切ではありません。
axtls の定義からを削除する__declspec(dllexport)
と問題が解決するのではないかと思いますが、回避できるのであれば上流のコードを変更したくありません。