問題タブ [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.

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

class - cdeclとmyclassの競合によるエラーC2664

Cの古いコードを現在のVC++プロジェクトに結合しようとしています。

coteglob関数は古いC部分に由来し、finteはTFStolz関数をcoteglobに渡すための中間関数です。

私はフォーラムを検索し、この関連する質問を見つけました: void(__thiscall MyClass :: *)(void *)を この方法で適用しようとしたvoid(__cdecl *)(void *)ポインターに変換する方法:

しかし、まだ機能していません。誰かがそれを適応させる方法について私を導くことができますか?私はまだかなりの初心者であり、これは私の知識からはほど遠いようです。

前もって感謝します!

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

c# - 「標準」のP/Invoke規約でCdecl呼び出しが頻繁に一致しないのはなぜですか?

私は、C ++機能がC#からP/Invokedであるかなり大きなコードベースに取り組んでいます。

コードベースには、次のような多くの呼び出しがあります...

C ++:

対応するC#を使用する場合:

この明らかな不一致が存在する理由についての推論のために、私はネット(私ができる限りではない)を精査しました。たとえば、C#内にCdeclがあり、C++内に__stdcallがあるのはなぜですか。どうやら、これによりスタックが2回クリアされるようになりますが、どちらの場合も、変数は同じ逆の順序でスタックにプッシュされるため、エラーが発生することはありません。デバッグ中にトレースを試みますか?

MSDNから:http: //msdn.microsoft.com/en-us/library/2x8kf7zx%28v=vs.100%29.aspx

extern "C"繰り返しになりますが、C ++コードとCallingConvention.CdeclC#の両方にあります。なぜそうではないのCallingConvention.Stdcallですか?または、さらに、なぜ__stdcallC ++にあるのですか?

前もって感謝します!

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

go - go のコンパイラ "gc" が C とは異なる呼び出し規約を使用するのはなぜですか?

Cは、私が調べてアセンブリから呼び出したcdeclを使用します。十分に感じられるのに、なぜ互換性を壊すのですか?別の大会が必要だったのはなぜですか。

0 投票する
0 に答える
119 参照

c# - cdecl 仕様に準拠したマネージ C# dll の記述方法

DLL の埋め込みを許可する既存のアプリケーションから呼び出すことができるように、cdecl 仕様に従う DLL を作成する必要があります。cdecl 仕様に従って、C# と dotnet Framework を使用して dll を作成できますか? これはどのように行うことができますか?

ありがとうルネ

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

c# - C# で dll から C 関数を呼び出すと、AccessViolationException が発生する

C dll からアンマネージ関数を呼び出すために PInvoke を使用しようとしています。dll のソースを開発者に公開できないため、一部の開発者は次の宣言を使用して Delphi で関数を呼び出しました。CDECL 呼び出し規約で SAT.dll を使用します。

その構造に基づいて、同じ DLL から同じ機能をテストするために、C# で次のコンソール アプリケーションを作成しました。私はいくつかの調査を行い、Delphi の Longint に相当するものは C# では int であり、PChar に相当するものは文字列へのポインタであることがわかりました (ただし、C# の文字列を使用しました)。

関数を呼び出すと、AccesViolationException がスローされます。AssociarAssinatura のコードには、関数のコードが実際に正常に実行されていることを示す内部プリントがいくつかあります。このため、関数が値を返すときに問題が関連していると思います。私の最善の推測は、どういうわけか呼び出し規約に問題があるということです。何かご意見は?

0 投票する
3 に答える
158 参照

assembly - 同伴者の立ち退き指示がないのはなぜですか?

x86 に残すべきコンパニオン命令がないのはなぜですか? そうすれば、

次のようになります。

それは一般的に速いだけではありませんか?

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

c# - C# アンマネージ C dll エクスポートのリストを取得する

エクスポートされた関数を含む C dll があります

コマンド ライン ツールの dumpbin.exe /EXPORTS を使用して、エクスポートされた関数のリストを抽出し、それらを C# コードで使用して (正常に) これらの関数を呼び出すことができます。

外部のコマンドライン ツールを使用せずに、.NET からこのエクスポートされた関数リストを直接取得する方法はありますか?

ありがとう

0 投票する
11 に答える
3784 参照

c++ - .* または ->* 演算子なしでメンバー関数を呼び出す方法はありますか

D::fooメンバーへのポインター関数を介して関数を呼び出す以下のメソッドは、エラーを生成します: 'f (...)' でメンバーへのポインター関数を使用.*または->*呼び出す必要があります .. もちろん、それはポインターへの呼び出し方法ではありませんメンバー関数。

正しい呼び出し方は(d.*f)(5);OR(p->*f)(5);

私の質問は、「左側にクラス オブジェクトがないクラスのメンバー関数を呼び出す方法はありますか?」です。thisクラス オブジェクト ( ) を通常の引数として渡すことはできますか?

私の考えでは、1 日の終わり (アセンブリ/バイナリ レベル) では、クラスのすべてのメンバー関数は通常の関数であり、n + 1 個の引数で動作する必要があります (+1 はthis)

以下の関数について話す場合D::foo、アセンブリ/バイナリ レベルでは、2 つの引数で動作する必要があります。

  1. クラス オブジェクト自体 ( と呼ばれるクラス D オブジェクトへのポインタthis)
  2. int.

それで、クラスオブジェクトで演算子D::fooを使用する代わりに、関数引数として渡されたクラスオブジェクトで呼び出す方法(またはハック)はありますか?. or -> or .* or ->*

サンプルコード:

1つの方法は、ブーストバインドを使用することです

編集:「このプログラムの機能するバージョンを探しているわけではないことに注意してください。機能させる方法を知っています」