最終更新日 2024-09-25

ロードと実行の基本

概要

ここではhm.NETの基本的な使い方が段階的に説明しています。
読者の想定レベルとしては、

といった程度のプログラミング力・開発環境を想定しています。

.NET Framework なので注意

繰り返しとなりますが、.NET Frameworkが対象となります。
Visual Studio 2019以降では、.NET Frameworkより.NETが優先的に出てきますが、
「.NET Core 3.1」や「.NET 5.0~.NET 8.0」は hm.NET の対象ではありません。

「.NET Core 3.1」や「.NET 5.0~.NET 8.0」は対象外 クロスプラットフォームとなる「.NET Core 3.1」や「.NET 5.0~.NET 8.0」は対象ではないので注意してください。
「.NET Core 3.1」や「.NET 5.0~.NET 8.0」で制作する場合、
NET5のCOMによる手法」及び、「Hm.NetCOM」の利用が適しています。

この際の、C#層の記述はhm.NETとそっくりなものとなります。

C#側のソース

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

秀丸マクロ側のソース

最も簡単なhm.NETの使用例となります。

test01.macなどと適当に名前を付ける
#HMNET = loaddll( hidemarudir + @"\hm.NET.dll" );

if ( !#HMNET ) { message "hm.NET.dllが読み込めない"; }

#result1 = dllfuncw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTestClass01.dll", "HmTestClass01.Class1", "func_ii_i", 3, 5 );

message str(#result1);

$result2 = dllfuncstrw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTestClass01.dll", "HmTestClass01.Class1", "func_ii_s", 13, 15 );

message $result2;

$result3 = dllfuncstrw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTestClass01.dll", "HmTestClass01.Class1", "func_is_s", 3, "500" );

message $result3;

// freedll(#HMNET); と記述するのは駄目