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);
}
私はまだ戻り値を使用していないことを知っています...これが機能しない理由を知りたいだけです。
編集!!!!
最初の例外:メッセージ="呼び出しのターゲットによって例外がスローされました。"
内部例外メッセージ="リクエストに失敗しました。" '
DeclaringMethod='rtsObj.DeclaringMethod'はタイプ'System.InvalidOperationException'の例外をスローしました
ご協力いただきありがとうございます。初めてリフレクションを使用するので、コードが途切れてしまい申し訳ありません。
編集#2 !!!
VSからのスタックトレース:Saftey Door Simulator.exe!Safety_Door_Simulator.Form1.btnInit_Click(object sender = {Text = "Initialize"}、System.EventArgs e = {X = 56 Y = 10 Button = Left})Line 46 C#[Externalコード]SafteyDoor Simulator.exe!Safety_Door_Simulator.Program.Main()行17 + 0x1dバイトC#[外部コード]
編集#3
内部スタックトレース:
StackTrace = "at Oe.RTS.RTSInterface.KillTeraTerm()\ r \ n at Oe.RTS.RTSInterface.SendCommand(String command)"
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);
}
}
}