OK I found the solution and I'll write it here for the common good.
- Start VS2010 as administrator.
- Open a class library project (exmaple - MyProject).
- Add a new interface to the project (see example below).
- Add a
using System.Runtime.InteropServices;
to the file
- Add the attributes InterfaceType, Guid to the interface.
- You can generate a Guid using Tools->Generate GUID (option 4).
- Add a class that implement the interface.
- Add the attributes ClassInterface, Guid, ProgId to the interface.
ProgId convention is {namespace}.{class}
- Under the Properties folder in the project in the AssemblyInfo file set ComVisible to true.
- In the project properties menu, in the build tab mark "Register for COM interop"
- Build the project
now you can use your COM object by using it's ProgID.
example:
the C# code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Launcher
{
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
public interface ILauncher
{
void launch();
}
[ClassInterface(ClassInterfaceType.None), Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYY"), ProgId("Launcher.Launcher")]
public class Launcher : ILauncher
{
private string path = null;
public void launch()
{
Console.WriteLine("I launch scripts for a living.");
}
}
}
and VB script using the COM:
set obj = createObject("PSLauncher.PSLauncher")
obj.launch()
and the output will be:
I launch scripts for a living
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…