数値でも文字列でもどちらでも対応できる関数も、いとも簡単に実現できます。
返り値と引数をobject型にし、実際の型を判定すればよいだけです。 決してobject型そのもののオブジェクトを返すわけではありません。 int型なりstring型なりの値を返すわけですが、どちらの型でもいけるよう、親クラス型となるobject型で宣言しておくことになります。
using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace NET4COMServer { [Guid("BD55F2A6-9ED0-4F4F-9D37-E6B84BE63272")] public class NET4COMServer { 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()); } } public string str_add(string a, string b) { return a + b; } public int int_add(int a, int b) { return a + b; } } }
#obj = createobject( currentmacrodirectory + @"\NET4COMServer.dll", "NET4COMServer.NET4COMServer"); $str_add = member(#obj, "add", "あいう", "かきく"); message($str_add); #int_add = member(#obj, "add", 100, 200); message(str(#int_add)); releaseobject(#obj); // dllは解放されないが、dll内の関数が呼ばれるので意味がある