問題タブ [stdcall]

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.

0 投票する
1 に答える
396 参照

c++ - Xerces-C 3.0 の使用中に __stdcall 規則を使用できますか? リンカー エラーが発生する

私のプロジェクトでは、__stdcall を使用することが重要です。しかし、私はこれを取得します:

1>ExchangeParser.obj: エラー LNK2001: 未解決の外部シンボル "public: static void __cdecl xercesc_3_0::XMLString::release(unsigned short * *,class xercesc_3_0::MemoryManager * const)" (?release@XMLString@xercesc_3_0@@SAXPEAPEAGQEAVMemoryManager @2@@Z) 1>ExchangeParser.obj : エラー LNK2001: 未解決の外部シンボル "public: static char * __cdecl xercesc_3_0::XMLString::transcode(unsigned short const * const,class xercesc_3_0::MemoryManager * const)" (? transcode@XMLString@xercesc_3_0@@SAPEADQEBGQEAVMemoryManager@2@@Z) 1>ExchangeParser.obj: エラー LNK2001: 未解決の外部シンボル "public: static unsigned short * __cdecl xercesc_3_0::XMLString::transcode(char const * const,class xercesc_3_0: :MemoryManager * const)" (?transcode@XMLString@xercesc_3_0@@SAPEAGQEBDQEAVMemoryManager@2@@Z) 1>ExchangeParser.obj : エラー LNK2001: 未解決の外部シンボル "public: static char const * const xercesc_3_0::XMLUni::fgXercescDefaultLocale" (?fgXercescDefaultLocale@XMLUni@xercesc_3_0@@2QBDB) 1>ExchangeParser.obj: エラー LNK2001: 未解決の外部シンボル " public: static class xercesc_3_0::MemoryManager * xercesc_3_0::XMLPlatformUtils::fgMemoryManager" (?fgMemoryManager@XMLPlatformUtils@xercesc_3_0@@2PEAVMemoryManager@2@EA) 1>ExchangeParser.obj: エラー LNK2001: 未解決の外部シンボル "public: static class xercesc_3_0 ::DOMImplementation * __cdecl xercesc_3_0::DOMImplementationRegistry::getDOMImplementation(unsigned short const *)" (?getDOMImplementation@DOMImplementationRegistry@xercesc_3_0@@SAPEAVDOMImplementation@2@PEBG@Z) 1>ExchangeParser.obj: エラー LNK2001: 未解決の外部シンボル"public: static unsigned short const * const xercesc_3_0::XMLUni::fgDOMWRTFormatPrettyPrint" (?fgDOMWRTFormatPrettyPrint@XMLUni@xercesc_3_0@@2QBGB) 1>ExchangeParser.obj: エラー LNK2001: 未解決の外部シンボル "public: static unsigned short const * const xercesc_3_0: :XMLUni::fgDOMXMLDeclaration" (?fgDOMXMLDeclaration@XMLUni@xercesc_3_0@@2QBGB)

何か助けはありますか?

0 投票する
2 に答える
1099 参照

windows - 装飾なしの __stdcall

私は関数を.dll使用していると思われますが、完全に装飾されていない名前 (アンダースコアや記号でさえありません) を持っています。次のようなエイリアスでファイルを作成しました__stdcall@.def

libしかし、(ファイルからインポートライブラリを作成するために使用している)エイリアスを無視していると思います(.defリンカーはまだfunc1@4未定義であると言います)

func1@4にマップするインポート ライブラリを作成するにはどうすればよいfunc1ですか?

0 投票する
2 に答える
964 参照

delphi - stdcall 呼び出し規約を持つコールバック システムを持つコンポーネントのパターン

この質問は、この質問から生じまし
問題は、システムからの多くのコールバック コマンドを保持できる非ビジュアル コンポーネントを作成することです。ユーザーは、IDE で無制限の数のコールバックを定義できます。コールバックは TCollection で TCollectionItem として定義されます。

これは非常にうまく機能するパターンですが、いくつかの欠点があります。(後で説明します)したがって、もっとうまくできるのではないかと思います;-)

これはメインコンポーネントであり、ユーザーは CommandsTable コレクションを介して IDE で無制限の数のコールバック関数を定義できます


すべてのコレクション アイテムは次のようになります。InternalCommandFunction は、システムから呼び出されるコールバックです。(stdcall 呼び出し規約)



そして、これが実装です。プロセス全体は「開始」手順で開始できます

そしてこれが問題のコードです。「InternalEventFunction」関数へのポインタを取得する唯一の方法は、MethodToProcedure() 関数を使用することだと思います。



前に説明したように、問題なく動作しますが、関数 MethodToProcedure() はサンク手法を使用しています。データ実行防止 (DEP) が有効になっているシステムや 64 ビット アーキテクチャではプログラムが動作しないため、これは避けたいと思います。新しい MethodToProcedure() 関数が必要になる可能性があります。
そのためのより良いパターンを知っていますか?


完了するために、これが MethodToProcedure() です。(原作者は誰だか知らない)。

0 投票する
2 に答える
368 参照

c++ - __stdcallのマップを作成する

__stdcallを使用して、関数名と関数ポインターのマップを作成しようとしています。現在、関数ポインタを取得する方法は次のとおりです。

そして今私の地図:

そのエラーはまさに私が期待したものですが、明らかに__stdcallの前にタイプを追加する必要があります。前面の「int」を削除すると、次のように文句を言います。

「int」が前面に含まれているマップオブジェクトを作成した後でコンパイルしようとすると、エラーがスローされます。

これは私にはあまり意味がありません。では、マップのタイプとして__stdcallを使用する正しい方法は何ですか?その前にintを追加することは私には疑わしいように思えましたが、追加しないと、指定された型が必要であると文句を言います。

また、混乱を招く場合は、CALLBACKは__stdcallの#defineです。

0 投票する
1 に答える
2964 参照

unix - 64ビットでのFastcall

私は32ビットの呼び出し規約の違いについて読んでいます。fastcallstdcall試練です。

私が読んだところによると、2つの規則には大きな混乱があり、この混乱を避けるために64ビットが標準化されました。

私は尋ねなければなりません、なぜfastcall選ばれたのですか?

また、fastcallstdcallはwin32用語であるため、引数を渡すためにレジスタを使用する、または使用しない関数呼び出しのUNIX用語は何ですか?

0 投票する
1 に答える
973 参照

com - Go から stdcall を作成する方法

COM インターフェイスへのポインタがあり、その仮想テーブルから関数ポインタを取得してメソッド呼び出しを行いたいと考えています。これを行うには、stdcall メソッドを呼び出す必要があります。Go では、どのように規約 stdcall で呼び出しを行うか、cgo で規約 stdcall で呼び出しを行うのですか?

0 投票する
2 に答える
631 参照

c - C - DLL は __stdcall であり、__cdecl ライブラリをインポートする必要があります

portaudio を使用する必要がある DLL をコンパイルしています。ソケットなどにもあらゆる種類の Windows ライブラリを使用しますが、リンカは portaudio ライブラリを認識しません。それから、portaudio が __stdcall の代わりに __cdcel を使用していることを思い出しました。通常は __cdcel を使用するだけで完了しますが、コンパイルする DLL は __stdcall を使用する必要があります。これは、Visual Basic で使用するためです。

そして、このプロジェクトがあなたにとって少し面倒に聞こえるかもしれませんが、そうです。

0 投票する
1 に答える
8667 参照

gcc - GCC の stdcall に相当するものはありますか?

私は GCC を使用して独自のカーネルに取り組んでおり、asm コードから C 関数を呼び出すときは、add esp,xx自分で行う必要があります。いくつかの検索の後、これstdcallは Microsoft の発明であり、GCC では使用できないことがわかりました。この作業を行う便利な方法はありますか?

0 投票する
1 に答える
2702 参照

c++ - __stdcall関数でstd::bindを使用する

__stdcall関数でstd::bind(boost :: bindではない)をどのように使用できますか、それとも現在の実装でも可能ですか?次の例をコンパイルしようとすると:

または同じですが、funcを次のように宣言します。

奇妙なビルド出力が表示されます(以下に含めました)。それをコンパイルさせるための非常に厄介な方法があります:

ただし、このような関数(* proc)(0,0,0);を呼び出すことはできません。それは悲しいことです。これはすべて、そのfunc(myhook)が__stdcallとして宣言されているために発生します。オフコース私はfuncの終わりに4つのdwordをプッシュするダーティアセンブリハックを書くことができ、これはそれを__stdcallにしますが、これについてはよくわかりません。また、これはさらに厄介な方法です。