= Creating COM Library =
* Create a new Class Library project (Eg: MyLib). Start VS2010 as administrator in order to register types and assemblies.
* Interface:
* Add to the file:using System.Runtime.InteropServices;
* Add a new interface to the project:public interface IMyLauncher
{
void launch();
}
* Add the attributes ''InterfaceType'', ''Guid'' to the interface. Generate a Guid using Tools > Generate GUID.
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("F207154F-C7E9-42B7-92BA-D6C4DA4D0A55")]
* Class:
* Add a class that implement the interface.
public class MyLauncher: IMyLauncher
{
public void launch()
{
}
}
* Add the attributes ''ClassInterface'', ''Guid'', ''ProgId'' to the interface. Generate a Guid using Tools > Generate GUID.
[ClassInterface(ClassInterfaceType.None)]
[Guid("0BE40A98-FCAC-432D-B0B6-999B42A28E48")]
[ProgId("MyLib.MyLauncher")]
* ''ProgId'' convention is ''{namespace}.{class}''
* Activate COM and register it:
* In Project Properties (Alt-Enter) > Application > Assembly Information, check "Make Assembly COM-Visible". Alternatively, In the folder MyLib > Properties > AssemblyInfo, set ''ComVisible'' to true.
* In Project Properties (Alt-Enter) > Build > Output, and check "Register for COM interop".
* Build the project. This will register the COM object.
* Alternatively, manually register COM object:C:\>"%Windir%\Microsoft.NET\Framework\v4.0.30319\regasm.exe" /codebase MyLib.dll
Now the COM object is available to be called by its ''ProgID''.
== Example ==
Example class for COM:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace MyLib
{
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
public interface IMyLauncher
{
void launch();
}
[ClassInterface(ClassInterfaceType.None), Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYY"), ProgId("MyLib.MyLauncher")]
public class MyLauncher: IMyLauncher
{
private string path = null;
public void launch()
{
Console.WriteLine("Hello, World, from a COM object");
}
}
}
Example how to call COM object using VB script:
set obj = createObject("PSMyLib.PSMyLauncher") obj.launch()
Output:
Hello, World, from a COM object
== References ==
* [[http://stackoverflow.com/questions/3360160/how-do-i-create-an-activex-com-in-c]]
* [[http://www.codeproject.com/Articles/12673/Calling-Managed-NET-C-COM-Objects-from-Unmanaged-C]]