V8.97β3No.10311
秀丸担当 さん 21/02/22 09:48
 

V8.97β3を公開しました。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

32bit版:
https://hide.maruo.co.jp/software/bin3/hm897b3_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hm897b3_x64_signed.exe

[ ]
RE:10311 V8.97β3No.10315
vscode-life さん 21/02/22 14:57
 
>
>V8.97β3を公開しました。

いろいろと検証してみたところ、COM関連は、秀丸で呼ぶ分にはインターフェイス自
体不要とわかりました。(.NET同士で組む以外、インターフェイスただの邪魔)
csproj に
必要:<EnableComHosting>true</EnableComHosting>
不要:<EnableComRegfree>true</EnableComRegfree>

プラットフォームターゲット x86忘れがち注意。ANYCPUだと秀丸32bit版では動作せ
ず(***.comhost.dllが64bitファイルになっててしまうため)


//----------------------------------------- ソースは以下だけで機能します。他
のソースは不要。interface不要。



using System;
using System.Runtime.InteropServices;

namespace NET5COMServer
{

    [ComVisible(true)]
    [Guid("C144B4C1-27CB-401F-ABE8-55378564E18D")]
    public class NET5COMServer
    {
        public string str_add(string a, string b)
        {
            return a + b;
        }

        public int int_add(int a, int b)
        {
            return a + b;
        }
        public object add(object a, object b)
        {
            if (a is int && b is int)
            {
                return int_add((int)a, (int)b);
            } else
            {
                return str_add(a.ToString(), b.ToString());
            }
        }

    }
}


これは限りなく、.NET Flamework 4.xの記述に近いと言えます。
(ソース的には、classのアトリビュートに「ComVisible(true)」が加わっているだけ。

#com = createobject( currentmacrodirectory + @"\NET5COMServer.comhost.dll",
"{C144B4C1-27CB-401F-ABE8-55378564E18D}" );
message(str(#com));

$str_add = member(#com, "str_add", "abc", "def");
message($str_add);

#int_add = member(#com, "int_add", 100, 200);
message(str(#int_add));

$add = member(#com, "add", "あいう", "かきく");
message($add);

#add = member(#com, "add", 300, 400);
message(str(#add));



[ ]
RE:10315 V8.97β3No.10317
秀丸担当 さん 21/02/22 15:25
 

検証ありがとうございます。
MicrosoftのサンプルのIServerはひょっとしたらいらないのではないかと思っていた
のですが、やっぱり無くても動くのですね。
vbs等でも使えて、だいぶんすっきりすると思います。

VisualStudioが、.comhost.dllのx86とx64の2ファイルを同時出力&本体DLLはAnyCP
Uの1つを出力してくれたらいいのに、と思います。
ちなみに秀丸ファイラーClassicで詳細カラムをカスタマイズして、秀丸ファイラー
独自の「CPU」カラムを追加しておくとDLLの種類がわかりやすいです。

[ ]