Вот простой проект с несколькими шагами, чтобы вы начали.
C # код:
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly:System.CLSCompliant(true)]
[assembly: ComVisible(true)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("7d9c5cd3-73d4-4ab1-ba98-32515256c0b0")]
namespace Cheeso.ComTests
{
[Guid("7d9c5cd3-73d4-4ab1-ba98-32515256c0b1")]
public class TestReply
{
public string salutation;
public string name;
public string time;
}
[Guid("7d9c5cd3-73d4-4ab1-ba98-32515256c0b2")]
public class TestObj
{
// ctor
public TestObj () {}
public TestReply SayHello(string addressee)
{
return SayHello(addressee, "hello");
}
public TestReply SayHello(string addressee, string greeting)
{
string x = String.Format("{0}, {1}!", greeting, addressee);
Console.WriteLine("{0}", x);
TestReply r = new TestReply
{
salutation = greeting,
name = addressee,
time = System.DateTime.Now.ToString("u")
};
return r;
}
}
}
код клиента VBScript:
Function Main()
Dim obj
Dim reply
set obj = CreateObject("Cheeso.ComTests.TestObj")
Set reply = obj.SayHello("Evgeny")
WScript.Echo "Reply at: " & reply.time
Set reply = obj.SayHello_2("Evgeny", "wassup")
WScript.Echo "Reply at: " & reply.time
End Function
Main
Для постройки:
(produce your .snk file, once)
csc.exe /t:library /debug+ /keyfile:Foo.snk /out:TestObj.dll TestObj.cs
regasm /codebase TestObj.exe
Затем просто запустите vbscript (через cscript.exe).
Как только вы освоите основную вещь, вы можете настроить ее, добавить GAC, сделать явную библиотеку типов, добавить явный ProgId и так далее.
ps. К вашему сведению, в этом примере показано, что происходит с перегруженными методами .NET в классе, зарегистрированном для взаимодействия. К имени метода добавлен неявный _2 (_3, _4 и т. Д.).