ライブラリ関数呼び出しノードを使用する際に呼び出し規約にあるstdcallとCの違いは何ですか?



使用ソフトウェア:
使用ソフトウェア・バージョン: 6.0
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題:
LabVIEWでライブラリ関数呼び出しノードを構成する際、呼び出し規約にstdcall (WINAPI)オプションとCオプションがあります。どちらを選択するべきですか?また、違いは何ですか?


解決策:
呼び出そうとしているダイナミックリンクライブラリ(DLL)によって使用する呼び出し規約を決定します。DLLはいずれかの規約で実行しますが、不適切な呼び出し規約が選択されている場合はDLLを実行後にエラーが発生するかクラッシュします。

一般的に呼び出し規約は、パラメータがサブルーチンを使用する際どのようにハンドルされるかを参照します。C呼び出し規約を使用する場合は、発呼者がスタックをクリーンアップする側となります。stdcall呼び出し規約を使用する場合は、呼び出す関数がスタックをクリーンアップする側となります。発呼者(LabVIEW)および呼び出すDLL関数が同じ呼び出し規約を使用していない場合、スタックをどちらも処理するか全くされません。いずれかの状況は、関数が呼び出された際にLabVIEWがクラッシュする原因となります。呼び出し規約は、ライブラリ関数呼び出しノードの構成画面の右下で設定します。




関連リンク:
技術サポートデータベース: I Can Use My DLL in LabVIEW 2009 or Earlier but it Crashes in LabVIEW 2010 or Later

添付:





報告日時: 09/20/2002
最終更新日: 12/09/2016
ドキュメントID: 2PJG4QQG