問題タブ [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++ - Why/when is __declspec( dllimport ) not needed?
In a project using a server.dll and a client.exe, I have dllexport
ed a server symbol from the server dll, and not dllimport
ed it into the client exe.
Still, the application links, and starts, without any problem. Is dllimport
not needed, then???
Details:
I have this 'server' dll:
and this client executable:
The server command line:
Client command line:
c - C-__declspec(thread)変数のパフォーマンス
私はライブラリのマルチスレッド実装に取り組んでいます。このライブラリの1つのモジュールには、いくつかのグローバル変数があります(プログラムの実行で非常に頻繁に使用されます)。これらの変数へのアクセスをより安全にするために、スレッドローカルストレージ(TLS)キーワードを使用してそれらを宣言しました__declspec(thread)
。
これがライブラリ外部関数の呼び出しです。この関数は、グローバル変数を持つモジュールを使用します。
このようにして、ライブラリで使用されるすべての変数がスレッドごとに複製されると思います。
x8コアプロセッサでプログラムを実行すると、操作を完了するために必要な時間は、単一プロセスの実装に必要な時間の3分の1を超えることはありません。
1/8に到達するのは不可能だと知っていますが、少なくとも1/6は到達可能だと思いました。
問題は、これらの__declspec(thread)
変数がパフォーマンスの低下の原因であるかどうかです。
c++ - クラス内のオーバーロードされた演算子は、DLLプロジェクトで使用される場合、__ declspec(dllexport)を必要としますか?
を使用する場合__declspec(dllexport)
、オーバーロードされた演算子にもこのエクスポートフラグを割り当てる必要がありますか?たとえば、次のようなものがあるとします。
クラスタイプで__declspec(dllexport)
使用するために必要ですか?==
または、そのクラスと継承されたクラスに固有であるため、エクスポートしないでください。
c++ - __declspec(uuid( "ComObjectGUID"))は何に展開されますか?
C++に対するMicrosoft固有の拡張機能を使用するコードがあります。
この文は何に拡張されますか?どうすればANSIC++で書き直すことができますか?
visual-c++ - MSVC: __declspec(dllexport) はシンボルを作成しません
MSVC (特に 2010 バージョン) で DLL を作成する場合、小さな問題があります。私のプログラムは、主要部分と DLL で構成されています。DLL には次の関数が含まれています。
ファイルは DLL プロジェクトを使用してコンパイルされます (プリコンパイル済みヘッダーを使用せず、空の DLL プロジェクトを選択しました)。dumpbin
ツールを使用してエクスポートされたシンボルをリストしたい場合、エクスポートのtest_function
下にリストされません。__declspec(dllexport)
実際にシンボルをエクスポートすることを強制する特定の設定はありますか?
どんな助けでも大歓迎です。ありがとうございました!
visual-c++ - MFC DLL から関数をインポートするときの LNK2001 未解決の外部
MFC DLL を作成し、たとえばファイル SerialPort.h に関数をエクスポートしました。
私のMFCアプリケーションでは、SerialInterface.hの関数を呼び出したいので、DLLから「SerialPort.h」を含めて呼び出しました:
例えば。
SerialPort.lib ファイルをリンカー インクルードに追加しましたが、コンパイルしようとすると、
この原因について行き詰まっています。すべてを再構築しようとしましたが、何も役に立たないようですか?
助けてくれてありがとう!
c++ - Cヘッダーの__declspecをDelphiに変換します
クラスをCヘッダーからDelphiで使用するように変換するのに問題があります。
Cヘッダーファイルの宣言のスニペットは次のようになります。
ISomeInterfaceパラメーターを受け入れるメソッドをエクスポートするDLLを作成しています。
DelphiでISomeInterfaceを次のように宣言しました。
pSomeInterface.SomeBoolMethodを呼び出すと、アクセス違反が発生します。
私は根本的に間違ったことをしていますか?
実際のCヘッダーはhttpserv.hであり、DelphiでIIS7ネイティブモジュールを実装しようとしています。
動作するいくつかのc++コードは次のようになります。
デバッグすると、pModuleInfoパラメーターに__vfptrメンバーが含まれ、その下に6つのメンバー([0]から[5]の名前が付けられ、値としてアドレスがあります)が含まれていることがわかります。これは、IHttpModuleRegistrationInfoクラスの仮想メソッドへのポインターであると推測されます。
DelphiRegisterModuleのエクスポートは次のようになります。
pModuleInfoには、cppの例の__vfptrメンバーと同等のアドレスが含まれており、__ vfptrの順序がヘッダーファイルのクラス宣言と同じであると仮定して、メソッドアドレスを抽出します。
呼び出すメソッドアドレスができたので、なんとかして呼び出す必要があります。私はおそらくこれをすべて間違った方法で行っています!
c++ - __declspec(dllimport)は実際にはどういう意味ですか?
私はこのようなQtソースコードを見ました:
Q_CORE_EXPORT
以下のように定義するマクロ:
では、__declspec(dllimport)
実際にはどういう意味ですか?
visual-c++ - VC ++ 2008/2010:throw()または__declspec(nothrow)の方が良い選択ですか?
VC ++ 2008および2010を使用する場合、関数が例外をスローしないことを示すために使用するのに適したマーカーは次のとおりです。
throw()
(C ++標準)__declspec(nothrow)
(MS拡張子)
私はいくつかの古いフォーラムの議論を読みました。そこでthrow()
は、関数が(マーカーに対して)スローされた場合に、を使用すると、コンパイラーが例外をキャッチするための追加のコードを実際に生成する可能性があると言われました。彼らのアドバイスは、コンパイラが実際に最適化に使用できるため、使用するのではなく、代わりに使用することですthrow()
。__declspec(nothrow)
私はいくつかの検索をしましたが、本当に有用な結果を思い付くことができませんでした。私の理解では、Boostライブラリはここでそれらを使用しないようにアドバイスしています。__declspec(nothrow)
は非標準のC++であるため、MSが例外仕様を実装している場合、throw()
動作が変わる可能性がある間も同じように機能し続けます。
c++ - 参照を返す関数で __declspec(nothrow) を使用する
__declspec(nothrow)
オブジェクト参照を返すいくつかのメンバー関数に適用したいと思います。たとえば、この関数 (MyClass.h 内) に追加したいと思います。
VC++のドキュメントには、次のように関数の戻り値の型の後に追加する必要があると書かれています。
return-type __declspec(nothrow) [call-convention] function-name ([argument-list])
これに従えば、私の機能のほとんどは で正常に動作し__declspec(nothrow)
ます。ただし、上記のメンバー関数 (または a を返す他の関数CMyClass&
) に対してこれを行うと、コンパイル エラーが発生します。
error C2059: syntax error : '__declspec(nothrow)'
戻り値の型の前に配置するとコンパイルされますが、ドキュメントには、__declspec() が間違った場所に配置されている場合、コンパイラは警告やエラーなしでそれを無視する可能性があるとも書かれています。
正しい使い方は__declspec(nothrow)
?