这是来自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);
}
}
}