問題タブ [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.
c# - アンマネージ クラス ライブラリ内のポインターへの C# 文字列
既存のアプリケーションが私のクラス ライブラリをインポートしようとしています。C++ よりも C# の方が経験が豊富なので、C# でこれを実行しようとしています。既存のアプリケーションでは、コードが管理されているため、C# では本来使用できない __stdcall を使用しています。RGiesecke.DllExport というライブラリを使用して、アンマネージド エクスポートを行います。
C/C++ の関数のサンプル ヘッダーがあります。
この関数の目的は、説明ポインターにライブラリーの簡単な説明を入力することです。
問題は、ここで char* が適切に使用されるかどうかわからないことと、このポインターに文字列を入力する方法がわからないことです。
誰かがこれで私を助けてくれることを願っています。
c++ - わかりやすく簡単に、なぜ_stdcallを使用するのですか?
C ++を使用したゲーム作成の状態を研究しているときに、呼び出し規約に出くわしました。
前の質問で、MSDNは_stdcallをうまく説明していないと誰かが言った-私は同意する。
_stdcallのような規約を呼び出す主な目的は何ですか?引数がスタックに配置される順序は重要ですか?X86のコードのサイズをどのように縮小しますか(他の誰かが述べたように)?
assembly - アセンブリ言語 - 呼び出し規約
誰かがアセンブリ言語で呼び出し先と呼び出し元を理解するのに役立つ実際の例を教えてもらえますか? 私はほとんどの情報源を調べてきましたが、それでも呼び出し先と呼び出し元を区別する方法がわかりません。前もって感謝します。(私はこの説明を追加しています - ありがとうございました! 私はここで新しいコードで申し訳ありませんが、適切に表示するコードを挿入する方法がわかりません) 私はこのコードを理解しようとしています - アセンブリの基本を学んでいます. 各コマンドにコメントを追加しようとしています(私のような他の誰かもそれを必要とするでしょう:
私は、呼び出し規約を定義するために、誰が呼び出し元で誰が呼び出し先であるかを把握する必要があることを読みました:)私はロジックを理解するのに多くの時間を費やしました: is call ds:lstrlenA は呼び出し先ですか? sub_401040 は発信者ですか? また、1 つのプログラムに複数の呼び出し規則を含めることはできますか? cdecl と stdcall が好きですか? 私はプログラマーではありませんし、コードを書いているわけでもありません。これがウイルスの分析にどのように役立つかを理解したいだけです。
dll - Embarcadero C ++ BuilderXE3DLLをEmbarcaderoC++BuilderXE3にインポートする
Embarcadero C ++ Builder XE3でDLLを作成し、同じ環境のテストプロジェクトで使用しようとしています。
コードで良い結果が得られないチュートリアルの例を取り上げます(!):http ://docwiki.embarcadero.com/RADStudio/XE3/en/Tutorial:_Using_Dynamic_Linked_Libraries_in_C%2B%2BBuilder_Applications
これが私のDLLの内容です:
BaseAuth.hファイル:
Auth.hファイル:
Auth.cppファイル:
およびFile1.cpp:
今テストアプリケーションで私は持っています:
同じBaseAuth.hファイル
ボタン付きのフォーム:
Test_DLLAuthOrga.h:
Test_DLLAuthOrga.cpp:
結果は次のとおりです。
ポインタmpAuthにはアドレスがあります。
しかし、そのメソッドにはアドレスがなく、「void TestMessage()」などの単純なメソッドを呼び出すと、アクセス違反が発生します。
=>最初は文字列の互換性の問題のようでした(ただし、「C++BuilderXE3」と「C++BuilderXE3」の間では同じ文字列形式が使用されると思いますか?!):UnicodeDelphiでDLLを呼び出すときにエラーが発生しました
=>同様の問題が見つかりましたが、C ++DLLをDelphiに変換し、C ++DLLをC++に変換しませんでした...:DelphiアプリでC++DLLを呼び出します
=>「HINSTANCEload;」の代わりに「HMODULE」を使用してみました。:同じ結果。
=>使用して成功せずに試しました
それ以外の :
=>また、「__stdcall」を「__cdecl」または「」(削除)に置き換えてみました。librayはロードされますが、GetProcAdressはNULLを返します。
=> DLLのメソッド「TestMessage()」を呼び出そうとして、何が間違っているのでしょうか。
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 ++にあるのですか?
前もって感謝します!
c++ - c++-builder: stdcall 型に変換
現在、古い owl-c++-builder-projekt を XE2 と owlnext を使用するように移植しようとしています。古いファイルでは、単純に行を呼び出すことができました
LP_I2Open が定義されている間
これらのコードブロックは、実際には複数のファイルからのものです。この順序は直感的だと思いました。
今、必要に応じてこれを書き直すのにいくつかの困難があります。左側は値を返す変換方法として理解されるようになりましたが、特定の値に割り当てることができないため、「L-Value expected」エラーがスローされます。ただし、FARPROC を LP_I2COpen に適合するものに変換する方法がよくわかりません。変換せずに試行すると、次のエラーがスローされます。
それで、私がこの行で行っている間違いを誰か知っていますか?
よろしく、ジュリアン