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