0

这是来自dll的代码:

  public static bool SendCommand(string command)
    {

        KillTeraTerm();

        try
        {
            SerialPort portToUse = new SerialPort("COM2");

            portToUse.Open();
            portToUse.WriteLine(command);
            portToUse.Close();

            StartTeraTerm();

            return true;

        }
        catch
        {
            return false;
        }

    }

这是我用来引用 dll 的代码:

        Assembly loadedDLL = Assembly.LoadFile(@"G:\PRODUCT VALIDATION GROUP\SOFTWARE VALIDATION\Ranorex Support Files\RTSInterface.dll");
        Type rtsObj = loadedDLL.GetType("Oe.RTS.RTSInterface");
        Object obj = Activator.CreateInstance(rtsObj);

        try
        {
            rtsObj.InvokeMember("SendCommand", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, obj, new object[] { "startbutton" });
        }
        catch (Exception ex)
        {
                MessageBox.Show(ex.Message);
        }

我知道我还没有使用返回值......只是想知道为什么这不起作用。

编辑!!!!

第一个异常:Message =“调用的目标已抛出异常。”

内部异常消息 =“请求失败。” '

DeclaringMethod = 'rtsObj.DeclaringMethod' 引发了“System.InvalidOperationException”类型的异常

谢谢你的帮助。第一次使用反射,对断断续续的代码感到抱歉。

编辑#2!!!

来自 VS 的堆栈跟踪:安全门 Simulator.exe!Safety_Door_Simulator.Form1.btnInit_Click(object sender = {Text = "Initialize"}, System.EventArgs e = {X = 56 Y = 10 Button = Left}) 第 46 行 C# [外部代码] 安全门 Simulator.exe!Safety_Door_Simulator.Program.Main() 第 17 行 + 0x1d 字节 C# [外部代码]

编辑#3

内部堆栈跟踪:

StackTrace = "在 Oe.RTS.RTSInterface.KillTeraTerm()\r\n 在 Oe.RTS.RTSInterface.SendCommand(字符串命令)"

KillTeraTerm 的代码:

   public static void KillTeraTerm()
    {
        if (Process.GetProcessesByName("ttermpro").Length != 0)
        {
            Process[] teraTermProcess = Process.GetProcessesByName("ttermpro");

            foreach (Process p in teraTermProcess)
            {
                p.Kill();
                Thread.Sleep(1000);
            }

        }
    }
4

1 回答 1

5

不要使用 Assembly.LoadFile(),它会在没有加载上下文的情况下加载程序集。请改用 LoadFrom()。

异常消息毫无意义,而不是您从 .NET 框架代码中获取的那种消息。您需要查看InnerException的堆栈跟踪以了解它在何处引发。

于 2010-10-05T02:46:04.610 回答