TCLで記述されたIXIAインターフェイスを制御するWPF GUIを構築しようとしています(IXIAはハードウェアを制御するアプリケーションです)、TCLバージョンは86です。この目的のために、私は次のように作成した
: C#WPFの使用中に "stdout"というエラーが発生しました。
- TCL_API.csクラスで構成されてい
- C#プロジェクトは - TCLのDLLが含まれています。
- IXIA.csクラス - TCLコマンドで処理するTCL_API.csクラスを呼び出す
evalScript
メソッドをIXIAアドオンにアクセスするすべてのメソッドが含まれています。
- Visual Studio 2013のWPF。IXIA.cs.xを呼び出すメソッドを使用しています。
問題はTCLコマンドの1が標準出力 『私が見つけたように、このTCLコマンドはputs
メソッド内含まれているため。 は、そのおそらく起こる「という名前のチャネルを見つけることができません』エラーが出るということである。 私は思いますputs
オーバーライドは、この問題を解決することができますが、ドンtは全体TCLコードだけのDLLを持っている「トン、私はドンようである行う方法を知っている」
を参照してくださいコードを:。
T clAPI.cs
class TclAPI { [DllImport("tcl86.DLL", CallingConvention = CallingConvention.Cdecl)] public static extern int Tcl_Init(IntPtr interp); [DllImport("tcl86.DLL", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr Tcl_CreateInterp(); [DllImport("tcl86.Dll", CallingConvention = CallingConvention.Cdecl)] public static extern int Tcl_Eval(IntPtr interp, string skript); [DllImport("tcl86.Dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr Tcl_GetObjResult(IntPtr interp); [DllImport("tcl86.Dll", CallingConvention = CallingConvention.Cdecl)] unsafe public static extern char* Tcl_GetStringFromObj(IntPtr tclObj, IntPtr length); }
IXIA.csコンストラクタ:IXIA.csクラスで
public IXIA(string ip, string username="admin", string password = "admin") { interp = TclAPI.Tcl_CreateInterp(); TclAPI.Tcl_Init(interp); if (interp == IntPtr.Zero) { throw new SystemException("can not ini tialize Tcl interpreter"); } _ip = ip; _userName = username; _password = password; }
evalScript方法:
public int evalScript(string script) { int Evalres = TclAPI.Tcl_Eval(interp, script); return Evalres; }
ありがとうございました。以前のソリューションを適用しました。それは動作しましたが、デバッグモード(VisualStudioの内部からクリックして実行)で実行したときだけですが、アプリケーション自体(.exeファイル)をダブルクリックすると同じエラーが返されます。それはなぜそうですか?それは修正できますか? –