問題タブ [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.
class - cdeclとmyclassの競合によるエラーC2664
Cの古いコードを現在のVC++プロジェクトに結合しようとしています。
coteglob関数は古いC部分に由来し、finteはTFStolz関数をcoteglobに渡すための中間関数です。
私はフォーラムを検索し、この関連する質問を見つけました: void(__thiscall MyClass :: *)(void *)を この方法で適用しようとしたvoid(__cdecl *)(void *)ポインターに変換する方法:
しかし、まだ機能していません。誰かがそれを適応させる方法について私を導くことができますか?私はまだかなりの初心者であり、これは私の知識からはほど遠いようです。
前もって感謝します!
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.Cdecl
C#の両方にあります。なぜそうではないのCallingConvention.Stdcall
ですか?または、さらに、なぜ__stdcall
C ++にあるのですか?
前もって感謝します!
go - go のコンパイラ "gc" が C とは異なる呼び出し規約を使用するのはなぜですか?
Cは、私が調べてアセンブリから呼び出したcdeclを使用します。十分に感じられるのに、なぜ互換性を壊すのですか?別の大会が必要だったのはなぜですか。
c# - cdecl 仕様に準拠したマネージ C# dll の記述方法
DLL の埋め込みを許可する既存のアプリケーションから呼び出すことができるように、cdecl 仕様に従う DLL を作成する必要があります。cdecl 仕様に従って、C# と dotnet Framework を使用して dll を作成できますか? これはどのように行うことができますか?
ありがとうルネ
c# - C# で dll から C 関数を呼び出すと、AccessViolationException が発生する
C dll からアンマネージ関数を呼び出すために PInvoke を使用しようとしています。dll のソースを開発者に公開できないため、一部の開発者は次の宣言を使用して Delphi で関数を呼び出しました。CDECL 呼び出し規約で SAT.dll を使用します。
その構造に基づいて、同じ DLL から同じ機能をテストするために、C# で次のコンソール アプリケーションを作成しました。私はいくつかの調査を行い、Delphi の Longint に相当するものは C# では int であり、PChar に相当するものは文字列へのポインタであることがわかりました (ただし、C# の文字列を使用しました)。
関数を呼び出すと、AccesViolationException がスローされます。AssociarAssinatura のコードには、関数のコードが実際に正常に実行されていることを示す内部プリントがいくつかあります。このため、関数が値を返すときに問題が関連していると思います。私の最善の推測は、どういうわけか呼び出し規約に問題があるということです。何かご意見は?
assembly - 同伴者の立ち退き指示がないのはなぜですか?
x86 に残すべきコンパニオン命令がないのはなぜですか? そうすれば、
次のようになります。
それは一般的に速いだけではありませんか?
c# - C# アンマネージ C dll エクスポートのリストを取得する
エクスポートされた関数を含む C dll があります
コマンド ライン ツールの dumpbin.exe /EXPORTS を使用して、エクスポートされた関数のリストを抽出し、それらを C# コードで使用して (正常に) これらの関数を呼び出すことができます。
外部のコマンドライン ツールを使用せずに、.NET からこのエクスポートされた関数リストを直接取得する方法はありますか?
ありがとう
c++ - .* または ->* 演算子なしでメンバー関数を呼び出す方法はありますか
D::foo
メンバーへのポインター関数を介して関数を呼び出す以下のメソッドは、エラーを生成します: 'f (...)' でメンバーへのポインター関数を使用.*
または->*
呼び出す必要があります
.. もちろん、それはポインターへの呼び出し方法ではありませんメンバー関数。
正しい呼び出し方は(d.*f)(5);
OR(p->*f)(5);
私の質問は、「左側にクラス オブジェクトがないクラスのメンバー関数を呼び出す方法はありますか?」です。this
クラス オブジェクト ( ) を通常の引数として渡すことはできますか?
私の考えでは、1 日の終わり (アセンブリ/バイナリ レベル) では、クラスのすべてのメンバー関数は通常の関数であり、n + 1 個の引数で動作する必要があります (+1 はthis
)
以下の関数について話す場合D::foo
、アセンブリ/バイナリ レベルでは、2 つの引数で動作する必要があります。
- クラス オブジェクト自体 ( と呼ばれるクラス D オブジェクトへのポインタ
this
) - と
int
.
それで、クラスオブジェクトで演算子D::foo
を使用する代わりに、関数引数として渡されたクラスオブジェクトで呼び出す方法(またはハック)はありますか?. or -> or .* or ->*
サンプルコード:
1つの方法は、ブーストバインドを使用することです
編集:「このプログラムの機能するバージョンを探しているわけではないことに注意してください。機能させる方法を知っています」