COMでstaticでpublicなメソッドが呼べないNo.10476
こみやんま さん 21/05/31 23:01
 
仕様かなとも思っていますが、単純にサイトー企画サイドで気づいてないかもしれな
いと思うので、
投稿します。

秀丸のCOM関連で「あれー、これどうなんだろうー」とも思っているのですが、
克服できるなら v9までに克服したほうがいいかとおもっているので

-------------------------.NET/Fw でも.NET5でも好きに
using System;
using System.Runtime.InteropServices;

namespace ConsoleApp35
{
    [ComVisible(true)]
    [Guid("041F4510-24BB-4565-975F-58AC6B349666")]
    class Program
    {
        public static long abc1()
        {
            return 1;
        }

        public long abc2()
        {
            return 1;
        }
    }
}


この時、staticが付かない方 abc2() (インスタンスメソッド)は秀丸マクロから呼
び出せますが、
(というかこのスタイルを想定スタイルとしていると思います)
static付きの方 abc1 (クラスメソッド)は秀丸マクロから呼び出せません。
(当たり前ですが、C#からはabc1もインスタンスメソッドとしても呼び出せます。)

仕様なら仕様でもいいかなーとは思っていますが、
「インスタンスメソッドとしても呼び出せるはずなのにキモイなぁ」
とも思っています。

[ ]
RE:10476 COMでstaticでpublicなメソッドNo.10477
fzok4234 さん 21/05/31 23:40
 
これって秀丸エディタ云々の話ではなく、「COMそのもの」の仕様だったみたいです。
.NETのCOM相互運用の条件
https://docs.microsoft.com/en-us/dotnet/standard/native-interop/qualify-net-types-for-interoperation

・For instance, parameterized constructors, 「static methods」,
  and constant fields are not exposed to COM clients.
と書いてあって、静的メンバーはCOMに公開できないようです。


[ ]
RE:10477 COMでstaticでpublicなメソッドNo.10478
こみやんま さん 21/06/01 00:31
 
>これって秀丸エディタ云々の話ではなく、「COMそのもの」の仕様だったみたいです。
> ......
>
fzok4234さん、情報ありがとうございます。

https://docs.microsoft.com/ja-jp/visualstudio/code-quality/ca1407?view=vs-2019

なぜに、CA1407が割り当てられてるのに、コード分析で出ないのか...


[ ]