エラー等の表示

  • 概要

    ここではhm.NETを利用する際に、エラー表示をどのように行うのか、
    あるいは内部エラーが発生した場合に、どのように確認するのかの概要が説明されています。

  • 秀丸デバッグモニター

    デバッグ情報は、秀丸デバッグ出力モニターで確認することが出来ます。

    • C#側のソース

      Visual Studio で作成。HmTestClass02.dllとしてコンパイルのこと
                                                                                     
      using System;
      
      namespace HmTestClass02
      {
          public class Class2
          {
              public static IntPtr debug_test()
              {
                  System.Diagnostics.Trace.WriteLine("デバッグモニターへの表示テスト");
      
                  return (IntPtr)0;
              }
          }
      }
      
    • 秀丸マクロ側のソース

      test01.macなどと適当に名前を付ける
      #HMNET = loaddll( hidemarudir + @"\hm.NET.dll" );
      
      #result = dllfuncw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTestClass02.dll", "HmTestClass02.Class2", "debug_test" );
      
      
      

      System.Diagnostics.Trace.WriteLine の内容が秀丸デバッグモニターに表示されます。

  • 内部的なエラーも秀丸デバッグモニターで確認出来る

    実行時にエラーが発生した際、ダイアログのUIで表示されることもありますが、
    ほとんどのケースでは、秀丸デバッグモニター上への表示となります。

    一度エラーを発生させて確認してみましょう。

    • C#側のソース

      Visual Studio で作成。HmTestClass01.dllとしてコンパイルのこと
      using System;
      
      namespace HmTestClass01
      {
          public class Class1
          {
              public static IntPtr func_ii_i(IntPtr a, IntPtr b)
              {
                  Int64 c = (Int64)a * (Int64)b;
                  return (IntPtr)(-c);
              }
      
              public static String func_ii_s(IntPtr a, IntPtr b)
              {
                  return $"{a}{b}";
              }
      
              public static String func_is_s(IntPtr a, String b)
              {
                  return b + a.ToString();
              }
          }
      }
      
      
    • 秀丸マクロ側のソース

      あえて呼び出しの「引数の型」を間違ってみましょう。
      本来は「13」と数値を指定するべきところを、「"13"」という文字列を指定してしまっています。

      test01.macなどと適当に名前を付ける
      #HMNET = loaddll( hidemarudir + @"\hm.NET.dll" );
      
      if ( !#HMNET ) { message "hm.NET.dllが読み込めない"; }
      
      $result = dllfuncstrw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTestClass01.dll", "HmTestClass01.Class1", "func_ii_s", "13", 15 );
      
      message $result;
      

      どこで問題が発生したのかなどの情報が出てきます。
      「System.ArgumentException」という引数例外、そして
      「System.StringをSystem.IntPtrに変換できない」と例外情報が出ています。
      「文字列」を「数値」に変換できないという内容から、
      「引数関係で、数値が要求されているところに、文字列を渡しているところがあるのではないか?」と推測出来ます。