Package問題:LabVIEWでライブラリ関数呼び出しノードを使用してDLLを呼び出すと、LabVIEWがクラッシュします。これはなぜでしょうか?解決策:DLL呼び出しにおいて、LabVIEWがクラッシュする場合、以下のよう原因/解決策が考えられます。DLLに適した呼び出し規約を指定していることを確認してください。Cを指定した場合、呼び出し側でスタックを開放しなければいけません。Stdcallを指定した場合、呼び出された関数がスタックを開放をしなければいけません。呼び出し側(この場合はLabVIEW)と呼び出される側(DLL)の呼び出し規約が一致してい場合、両方がスタックを開放してしまうか、いずれもが開放しないという状態になります。LabVIEWがクラッシュします。DLLがLabVIEWのメモリを上書きしないように注意してください。LabVIEWがDLLにポインタを渡すとき、配列、文字列、クラスタなどのポインタ格納用にメモリを確保する必要があります。DLLがメモリ領域に情報を書き込む場合、通常、引数で渡したポインタを、呼び出し後に再度読み込みます。ライブラリ関数呼び出しノードの右側の端子を読み出すことと同義です。渡す引数は配列のサイズやデータ構造のサイズを表す数値で、関数側がどれだけのメモリが割り当てられているのか分かるようになっています。十分なメモリが確保されていなかったり、DLLが確保されていないメモリ領域に書き込んだ場合、LabVIEW用のメモリ領域に上書きされるためクラッシュします。LabVIEWからDLLにデータを渡す場合、引数がDLLが受け取る型で、渡すようにしてください。LabVIEWとDLLが異なった引数の型(値、ポインタ、ハンドルなど)でやりとりする場合、期待に反してDLLが不適切なメモリにアクセスします。結果として、誤ったデータを受け取ったり、最悪の場合にはLabVIEWやWindowsがクラッシュする場合があります。DLLが、ライブラリ関数呼び出しノードの左側の端子から入力されたメモリ領域に書き込む場合、対応する右側の端子から配線を引き出してください。右側の端子を配線しない場合、LabVIEWはDLLがそのメモリを使用しないと想定し、別の作業用にメモリを割り当てます。結果として、DLLがLabVIEWのメモリ領域を上書きし、LabVIEWがクラッシュする原因になります。LabVIEWで作成したDLLのフロントパネルを表示している場合、2つの厳密な制約があります。ライブラリ関数呼び出しノードでは、DLLの呼び出しは再入可能に設定する必要があります。再入可能に変更することで実現できます。DLLを呼び出すVIはユーザインタフェース実行システムで実行されてはなりません。なっていることを確認してください。