2016-11-15 20 views
0

スタンドアロンのプログラムを実行している場合にのみ、私は次の関数を使ってMATLABオブジェクトを持って取得:取引ツールボックス:「警告:リスナーコールバックを評価中にエラーが発生しました」

function obj = request_historical(obj,ticktype) 
     startdate = floor(now)-1500; 
     enddate = floor(now); 
     period = '1 day'; 
     tradehours = false; 
     eventhandler = 'IB_histHandler'; 

     d2 = history(obj.ib,obj.ibContract,startdate,enddate,ticktype,period,... 
     tradehours,eventhandler); 
    end 

その後、私はその関数を呼び出します。この関数は、過去の財務データを送信し、別の関数 "IB_histhandler"によって処理されます。この機能は、スタンドアロンプ​​ログラムと同じディレクトリにあります。

ワークスペースを使用してMatlabのプログラムを通してそれを実行しているとき、それは正常に動作しますが、私はスタンドアロンコンパイルされたプログラムを実行するたびに、私は警告の束を得る:

Warning: Error occurred while evaluating listener callback. 
> In pause (line 21) 
    In IB_socket (line 432) 
    In start (line 13) 
    In tradingbot (line 31) 
Error using comeventcallback (line 24) 
Error firing event 'historicalData' to 'IB_histHandler'. 

それは私のスタンドアロンのexeファイルのプログラムのようにできないのですプログラムがワークスペースを使用してMATLABを実行しているときにプログラムが検出するような "IB_histhandler"関数を見つけます。

答えて

0

これがあなたの質問に答えるかどうかはわかりませんが、私はイベントハンドラをベースクラスの静的メソッドに置きます。これにより、ハンドルをツールボックスに簡単に通すことができます。

この静的メソッドに永続変数(静的プロパティのmatlabのバージョン)を作成します。この変数は、基本クラスがサブスクライブできるイベントを発生させることができるオブジェクトを保持します。たとえば...

methods (Static) 

    function HandleEvents(newObject,varargin) 

     persistent obj 
     % obj is filled during base object construction... 
     if nargin==1 
      obj=newObject; 
      return 
     end % Rest of the function follows... 

このオブジェクトのポインタを保持するプロパティを基本クラスに割り当てることができます。

すべてが1つのクラスにまとめられていて、うまく機能します。

関連する問題