Я пытаюсь создать графический интерфейс WPF для управления интерфейсом IXIA, который написан в TCL (IXIA - приложение, которое управляет оборудованием), версия TCL - 86.
Для этого я создал следующее:Получение «невозможно найти канал с именем« stdout »error» при использовании C# WPF
- C# проект, который состоит из
- класса TCL_API.cs - содержит TCL библиотеки DLL.
- IXIA.cs class - содержит все методы доступа к IXIA additianlly метод
evalScript
, который вызывает класс TCL_API.cs, который является дескриптором команд TCL.
- WPF в visual Studio 2013. С вызовами методов для IXIA.cs.
Проблема заключается в том, что одна из команд TCL получить ошибку «не может найти канал под названием„стандартный вывод“. Как выяснилось, его, вероятно, происходит потому, что эта команда TCL содержит puts
метод внутри. Я думаю, puts
переопределения может решить эту проблему, но дон «знает, как сделать это, как я не» т есть весь код 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 конструктор:
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 в классе IXIA.cs:
public int evalScript(string script) { int Evalres = TclAPI.Tcl_Eval(interp, script); return Evalres; }
Спасибо за ответ, я применил ваше прежнее решение. Он работал, но только тогда, когда я запускаю его в режиме отладки (щелчок выполняется изнутри VisualStudio), но при двойном щелчке по самому приложению (файл .exe) он возвращает ту же ошибку. Почему это так? Можно ли это исправить? –