問題タブ [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++ - __declspec(dllexport) の使用
.dll ライブラリを OOP 方式で実装しています
私のマクロは次のとおりです。
DLLINTERFACE
いくつかの s を使用してクラス名の前に置いた後、コンパイラーは、sで使用する各関数に対して を std
提供する必要があるといういくつかの警告を表示します。いくつかの関数を配置してこれを解決しようとしましたが、クラス名に既に配置しているため、エラーが発生します。おそらく、すべてのパブリック関数を警告で定義することにより、警告を削除できます。しかし、個々の関数ではなく、クラス名のみを定義することで警告をなくすにはどうすればよいでしょうか?dll-interface
std
DLLINTERFACE
DLLINTERFACE
このような:
しかし、これではありません:
c# - __declspec(dllexport) ::ベクトル
私は文字列の配列を c++ dll から ac# アプリケーションに返す方法を考え出そうとしましたが、これを行う方法や非常に基本的なレベルの記事を見つける方法に行き詰まっています。
以下のコードがあるとします。太字の行を修正するにはどうすればよいですか:
ありがとう
マット
c++ - `__declspec(align(#))` はどのように機能しますか?
はい、私はこれを読みました: http://msdn.microsoft.com/en-us/library/83ythb65.aspx
しかし、それは私には明らかではありません。まず第一に、__declspec(align(#))
宣言されたすべてのオブジェクト (構造体内) をアラインされたオフセットから開始します。その部分は明らかです。アラインメントは、オブジェクトが含まれる構造化によっても「継承」されます。しかし、オブジェクトのサイズは変更されませんね。正確には、なぜsizeof()
このコードでは:
戻る32
?
c++ - Windows および Linux での C++ [[gnu::visibility("default")]] と __declspec(dllexport) の比較
C++ でいくつかの共有ライブラリを作成する必要があり、開発者のオペレーティング システムとして Linux を使用しました。dlsym
/を介してシンボルをロードする場合は、シンボルを表示する必要があることを知っていますLoadLibrary
。したがって、Linux では、すべてのシンボルが次のパターンに従いました。
C++11 を有効にして clang を使用したところf
、ホスト プログラムに読み込むことができました。Windows に移行したとき、C++11 を有効にして GCC 4.8.2 を使用し、そのパターンは Windows マシンでも動作しましたLoadLibrary
。(新しい属性構文には C++11 を使用する必要がありました)。__declspec(dllexport)
Windows では、共有ライブラリからシンボルをエクスポートするために使用する必要があることを知っています。ならどうしよう?__declspec(dllexport)
もう必要ありませんか?
編集:
ここで、それらは同義語であることがわかりました(私は思います)ので、特定のターゲットにマクロと s を使用しないようにする[[gnu::attribute]]
ための理由はありますか?__declspec(dllimport)
ifdef
c++ - C/C++ リンケージ規則
copy_if、transform など、単項関数またはバイナリ関数を最後の引数として受け取る C++ アルゴリズムを呼び出す場合、atoi や tolower などの C ライブラリ関数を渡すことができます。
たとえば、以下の呼び出しは正常に機能し、正しい出力が得られます (ideone で試行)
この使用法は、すべての C++ コンパイラで動作することが保証されていますか?
C++ で考える本には、「これは一部のコンパイラで動作しますが、必須ではありません」と記載されています。言及されている理由は、(私が理解しているように) transform は C++ 関数であり、最後の引数が同じ呼び出し規約を持つことを期待しているためです。
この本では、この問題の解決策として、このようなラッパー関数を別の cpp ファイルに作成し、iostreams ヘッダー ファイルをインクルードしないことも提案しています。
これは問題なく動作しますが、呼び出し規約の問題がどのように解決されるかわかりませんでした。transform は引き続き C++ 関数であり、tolower は strTolower の C 関数であるため、この異なる呼び出し規則がここでどのように処理されるかを示します。
c++ - __declspec() の「ストレージ クラス情報」とはどういう意味ですか?
__declspec に関するMSDNの記事を読んでいます。
それでは始まります:
ストレージ クラス情報を指定するための拡張属性構文で は、__declspec キーワードを使用します。これは、特定の型のインスタンスを、次に示す Microsoft 固有のストレージ クラス属性と共に格納することを指定します。...
ストレージ クラス情報とは正確には何を意味するのでしょうか? そして、それはコンパイラにどのように影響しますか?
追加 1
誰かがコメントとしてリンクを投稿しましたが、すぐに削除しました。リンクが便利だと思いました。なのでここに追記。