問題タブ [cdecl]
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.
linux - SteinbergVSTSDKを使用したg++cdecl呼び出し規約
私が調べた限りでは、GNUCはデフォルトで関数呼び出しにcdeclを使用していることがわかります。VST SDKは、GNU Cでコンパイルするときに、呼び出しをcdeclとして明示的に定義し、次のエラーを吐き出します。
同時に、明示的な定義__cdeclを削除し、コンパイラーに決定させると、問題なくコンパイルされます。デフォルトはcdeclなので、これで同じエラーがスローされないようにする必要がありますか?
ウィキペディアで、cdeclの場合、「GCCバージョン4.5以降、関数を呼び出すときにスタックを16バイト境界に整列させる必要があります(以前のバージョンでは4バイトの整列のみが必要でした)」と読みました。私の問題の洞察と考えられる原因は?
また、それを__fastcallまたは__stdcallとして定義すると、同じエラーが発生します。では、ここで実際に何が起こっているのでしょうか。
objective-c - ARC属性を含める正しい場所について言及している場合、Appleのドキュメントはどういう意味ですか?
変数宣言でいつ使用するかを明確にするために(しゃれを意図せずに)キャストしているときに、ARCへの移行リリースノート__strong
でこれらの行に出くわしました。
変数を正しく装飾する必要があります。オブジェクト変数宣言で修飾子を使用する場合、正しい形式は次のとおりです。
例えば:
他のバリアントは技術的には正しくありませんが、コンパイラによって「許可」されています。この問題を理解するには、http://cdecl.org/を参照してください。
これはApple側のある種の冗談だと思うが、私はそれを理解しているとは思わない。明らかに問題ではありませんが、私はそれを正しくやりたいと思います。変数宣言を正しく「装飾」することの重要性は何ですか。また、cdecl.orgはどのような点を目指していますか。
編集:明確にするために、私はなぜ書くのかを正確に理解したい
「技術的に正しくない」です。
visual-studio-2010 - VS2010 のアップグレード後に lib にリンクできません (__cdecl vs __thiscall?)
おでこが傷だらけです。
静的ライブラリとして使用する大きなオープン ソースDICOM
ライブラリ ( ) があります。dcmtk
これはアンマネージド C++ であり、それC++ DLL
をラップするマネージドからリンクしています。CMake を使用して、さまざまなプラットフォームのビルド手順を修正します。(2008 年から)への移行によりVS2010
ビルドが壊れたため、使用しているライブラリのバージョンも更新する機会を得ました (より使いやすいはずですVS2010
)。ライブラリをいじった後、ビルドが行われます(型変換に関する無数の警告を出したり受け取ったりします)。しかし、それを使用するコードはリンクしません。未解決の外部シンボル エラーが多数スローされます。
ライブラリに問題はありません(libファイル名を変更すると、適切なメッセージで以前に失敗します)。
ライブラリ ファイルを DUMPBIN で逆アセンブルすると、適切なトークンが表示されます。例: … 000000000000000E: C3 ret
??1OFString@@QEAA@XZ (public: __cdecl OFString::~OFString(void))
:
しかし、リンカはそれを見つけられません:
私はそれが__cdecl vs. __thiscall
不一致であるという理論に取り組んできましたが、VSに他の規則でライブラリを構築させることができませんでした。(皮肉なことに、古い 2008 バージョンはemit __thiscall
、私が考えた /Gd オプションでコンパイルされているようですforces __cdecl
)。
洞察はありますか?
c++ - 標準の __cdecl の代わりに __fastcall を使用すべきではないのはなぜですか?
私は何人かの人々が言っているのを聞いて、他の呼び出しの代わりに2つのパラメータを登録する__fastcall
よりも速い__cdecl
と言っています。__stdcall
しかし一方で、これは C で使用される標準ではありません。
__fastcall
Cの標準のように望ましくない理由と、コードでこれをいつ使用するかを知りたいです。
c++ - _Windowsフォームアプリケーションでのbeginthreadの実装
Windowsフォームアプリケーションで単純な_beginthread関数を使用してスレッドを作成しようとしました(コンソールアプリケーションを作成することで成功しました。
私のエラー(および警告)は次のとおりです。
c:\users\artur\desktop\clock\thread_clock\thread_clock\Form1.h(117): warning C4441: calling convention of '__cdecl ' ignored; '__clrcall ' used instead
1>c:\users\artur\desktop\clock\thread_clock\thread_clock\Form1.h(128): error C2664: '_beginthread' : cannot convert parameter 1 from 'void' to 'void (__cdecl *)(void *)'
1> Expressions of type void cannot be converted to other types
それを防ぐ方法は?
dll - Dumpbinに奇妙なメソッド名が表示されます(MS Visual C ++でエクスポート関数を生成します)
VSで新しいWin32プロジェクトを作成し、この目的でダイナミックライブラリ(* .dll)を選択しました。
メインファイルにいくつかのエクスポート機能を定義しました:
ダンピン/exportsを見ると、次のようになっています。
私は次のようにC#バージョンで呼び出しています:
エクスポートされたメソッドを使用する正しい形式ではありません。C ++ dllプロジェクトでエクスポートメソッドのそのような名前を生成できなかったのはどこですか?
c++ - C型宣言を解析するためのライブラリ?
任意の型宣言 (たとえば、 のような宣言)を解析するのに役立つオープン ソース ライブラリ ( または で記述)C
を見つけようとしています。C++
C/C++
void *(*(*foo[])( int, void * [] ))[123]
C/C++
オープンソースのType Declaration 解析ライブラリを推奨できる人はいますか?
注: GPL ライセンス コード (cdecl
ツールなど) は使用できません。これはクローズド ソース アプリケーション用であり、自分で記述できるものに対するより堅牢なソリューションを望んでいるからです。
assembly - アセンブリ言語 - 呼び出し規約
誰かがアセンブリ言語で呼び出し先と呼び出し元を理解するのに役立つ実際の例を教えてもらえますか? 私はほとんどの情報源を調べてきましたが、それでも呼び出し先と呼び出し元を区別する方法がわかりません。前もって感謝します。(私はこの説明を追加しています - ありがとうございました! 私はここで新しいコードで申し訳ありませんが、適切に表示するコードを挿入する方法がわかりません) 私はこのコードを理解しようとしています - アセンブリの基本を学んでいます. 各コマンドにコメントを追加しようとしています(私のような他の誰かもそれを必要とするでしょう:
私は、呼び出し規約を定義するために、誰が呼び出し元で誰が呼び出し先であるかを把握する必要があることを読みました:)私はロジックを理解するのに多くの時間を費やしました: is call ds:lstrlenA は呼び出し先ですか? sub_401040 は発信者ですか? また、1 つのプログラムに複数の呼び出し規則を含めることはできますか? cdecl と stdcall が好きですか? 私はプログラマーではありませんし、コードを書いているわけでもありません。これがウイルスの分析にどのように役立つかを理解したいだけです。