エラー等の表示

概要

ここでは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" );
    
    
    

    PICTURE

    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;
    

    PICTURE

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