ni.com is currently undergoing scheduled maintenance.
Some services may be unavailable at this time. Please contact us for help or try again later.
07-15-2010 03:07 AM
>フラグの情報を格納するのに、複数のインスタンスで共有できる、グローバル変数は使えないでしょうか?
別のアプリから呼ばれても共有できるグローバル変数というのは分りません。
07-26-2010 07:56 AM
上田 様、 KONDOH 様、GNDT 様
横割り失礼いたします。
日本ナショナルインスツルメンツ 見目と申します。
VBアプリケーションとLabVIEWアプリケーション間にてフラグのようなものを使用するには、
「PostLVUserEvent」をご使用されては如何でしょうか。
「PostLVUserEvent」は、DLLにイベントを作成するコードを組み込み、
そのイベントをLabVIEWにて、ユーザイベントとして登録し、
DLLがイベントを作成するタイミングでLabVIEW上にてイベントストラクチャ内コードが実行されるというものでございます。
この動作を行ないますサンプルは下記のURLにございますので、ご参照頂けますと幸いです。
Posting Events to a LabVIEW Event Structure From a Dll
http://zone.ni.com/devzone/cda/epd/p/id/1480
上記内容に関しましてご不明点やご質問がございましたら、
どうぞお気軽にご連絡いただけますよう宜しくお願い申し上げます。
日本ナショナルインスツルメンツ 見目 ルツ
07-27-2010 02:42 AM
日本ナショナルインスツルメンツ 見目様
お世話になっております。
提示頂いたサンプルを試そうと思ったのですが、私が使っているLabVIEW7.0では開けませんでした。(最初のスレッドで8.6を使っていると書きましたが、誤りでした。)
サンプルはLabVIEW7.1で作られているようです。
LabVIEW7.0でも同じ方法が可能でしょうか?
もし可能であれば、LabVIEW7.0で試せるサンプルを頂けませんでしょうか?
07-28-2010 06:16 AM
上田 様
日本ナショナルインスツルメンツ 見目でございます。
LabVIEW7.0で保存しましたのでご確認頂けますでしょうか。
何卒宜しくお願い申し上げます。
日本ナショナルインスツルメンツ 見目 ルツ
07-30-2010 12:28 AM
日本ナショナルインスツルメンツ 見目様
サンプルをありがとうございます。
このサンプルでは、LVUserEvent.viの中で[Create User Event]で作成したユーザイベント出力を、DLLの中にあるSendEvent関数の引数LVUserEventRef *rwerとイベントストラクチャに渡して、イベントストラクチャとSendEvent関数の関連付けを行っていると理解しました。
その理解で宜しいでしょうか?
ところで、私が行いたいのはVsicalBasicアプリからVIに何かしらの信号を送ることです。
サンプルを見させて頂いて、VsicalBasicアプリからDLL内のSendEvent関数を呼んで、VIにイベントを送れれば良いと思ったのですが、VsicalBasicアプリからSendEvent関数を呼ぶ時に、引数LVUserEventRef *rwerへ何を渡せば良いのか分りません。
この辺を教えて頂けるとありがたいです。
08-03-2010 04:16 AM
上田 様
日本ナショナルインスツルメンツ 見目でございます。
ご連絡が遅れまして大変申し訳御座いません。
サンプルの動作は、まずLabVIEWでイベント登録を行ないます。
その後、DLLにLabVIEWで登録されたイベントのレファレンスを渡しますと、DLLが登録されたイベントへ何からのデータを渡します。
渡されるデータタイプは、イベント登録の際に指定します。
「LVUserEvent.cpp」がこのサンプルのDLLのソースファイルでして、このサンプルの場合ですと、
PopulateStringHandle(newStringHandle,"Guess where I came from"); にて、
データ("Guess where I came from")をnewStringHandleに渡しています。
その後、PostLVUserEvent(*rwer,(void *)&newStringHandle);にて、
newStringHandleのデータを*rwerに渡しています。
DLLにLabVIEWで登録されたイベントレファレンスを渡す事により、SendEventは、(LVUserEventRef *rwer)を取得します。
LabVIEWでDLLを呼び出すには「ライブラリ関数呼び出しノード」を使用します。
「ライブラリ関数呼び出しノード」をダブルクリックして、
DLLのパスを参照し、SendEvent関数を指定して頂いたあと、パラメータにてパラメータを指定します。
その後、イベントストラクチャにて、ユーザイベントを指定して頂ければ、DLLから渡されるデータ(今回は文字列)がLabVIEWで呼び出せます。
従って、SendEvent関数の引数LVUserEventRef *rwerには、LabVIEWからイベントレファレンスを渡してください。
上記内容につきまして、ご質問やご不明な点などございましたら、
どうぞお気軽にご連絡頂けますようお願い申し上げます。
日本ナショナルインスツルメンツ 見目 ルツ
08-03-2010 04:47 AM
日本ナショナルインスツルメンツ
見目様
お世話になっております。
私のしたいことが伝わっていないでしょうか?
頂いたサンプルは”LabVIEWアプリA→DLL→LabVIEWアプリB”でイベントを受け渡しています。
私のしたいことは、”Visual BASICアプリ→DLL→LabVIEWアプリ”です。
LabVIEWアプリならイベントレファレンスを登録し、DLLへ渡せますが、Visual BASICアプリでもLabVIEWイベントレファレンスを登録することが出来るのでしょうか?
Visual BASICアプリ(DLLではないウィンドウを持つアプリ)からLabVIEWアプリへイベントかなにかを渡して、Visual BASICアプリとLabVIEWアプリの同期を取る方法があれば教えて下さい。
08-04-2010 09:04 PM
上田 様
ご連絡ありがとうございます。
上田様のご希望の動作の把握ができておらず大変申し訳ございません。
LabVIEWとVisual Basicのデータの共有をご希望ということでよろしいでしょうか。
Visual BasicからLabVIEWにデータを共有させる方法は、ActiveXを使用します。
LabVIEWで作成されたVIはActiveXServerでして、VIを実行中はActiveXServerとして
Visual Basicから値が制御できます。
その際、LabVIEW側は、VIを実行していればそれ以外の動作は必要ございません。
下記のURLにサンプルがございます。
Passing Data between LabVIEW and Visual Basic Using the ActiveX Server
http://zone.ni.com/devzone/cda/epd/p/id/1396
逆にLabVIEWから制御する場合は、ActiveXのレファレンスを開いて値を書き込む必要がございます。
下記のディレクトリにサンプルがございますので、ご参考にして頂ければと思います。
C:\Program Files\National Instruments\LabVIEW 2009\examples\comm\axevent.llb\ActiveX Event Callback for Excel.vi
また、NIサンプルファインダから、外部アプリケーションとの通信>ActiveXにて他サンプルもご覧頂けます。
上記内容につきまして、ご質問やご不明な点などございましたら、
どうぞお気軽にご連絡頂けますようお願い申し上げます。
日本ナショナルインスツルメンツ 見目 ルツ
08-24-2010 04:00 AM
日本ナショナルインスツルメンツ
見目様
御提示された方法でできました。
ありがとうございました。
08-24-2010 07:02 PM
上田 様
ご多忙中、ご連絡ありがとうございます。
ご希望の動作が出来たとのこと大変嬉しく思います。
この度は上田様のご希望の動作の把握に時間がかかってしまい申し訳ございません。
また何かお困りの際は御気軽にご連絡頂けますようお願い申し上げます。
この度はNIディスカッションフォーラムをご利用いただきましてありがとうございました。
日本ナショナルインスツルメンツ 見目 ルツ