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);
        }

私はまだ戻り値を使用していないことを知っています...これが機能しない理由を知りたいだけです。

編集!!!!

最初の例外:メッセージ="呼び出しのターゲットによって例外がスローされました。"

内部例外メッセージ="リクエストに失敗しました。" '

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);
            }

        }
    }
4

1 に答える 1

5

Assembly.LoadFile()は使用しないでください。ロードコンテキストなしでアセンブリをロードします。代わりにLoadFrom()を使用してください。

例外メッセージは、.NET Frameworkコードから取得するようなものではなく、まったく意味がありません。InnerExceptionのスタックトレースを調べて、どこで発生したかを知る必要があります。

于 2010-10-05T02:46:04.610 に答える