NOMはレジストリ登録なしにDLLからオブジェクトを生成するCOMオブジェクトです。
以下のことが可能です。
Visual Studio で IDispatchImpl を利用して作成したCOMオブジェクトはレジストリ登録を必要とします。
このようなCOMオブジェクトは
作成するCOMライブラリをNOM名に対応させることで、
STDAPI DllGetClassObject(IN REFCLSID rclsid, IN REFIID riid, OUT LPVOID FAR* ppv) { if(::IsEqualGUID(rclsid, CLSID_NULL)) { wchar_t* pClassName = (wchar_t*)*ppv; if(!pClassName || pClassName[0] == L'\0') { return ((IClassFactory*)&g_oCF_Hoge)->QueryInterface(riid, ppv); } else if(::wcscmp(pClassName, L"Hoge") == 0) { return ((IClassFactory*)&g_oCF_Hoge)->QueryInterface(riid, ppv); } else { return CLASS_E_CLASSNOTAVAILABLE; } } else if(::IsEqualGUID(rclsid, CLSID_Hoge)) { return ((IClassFactory*)&g_oCF_Hoge)->QueryInterface(riid, ppv); } else { return CLASS_E_CLASSNOTAVAILABLE; } }
作成する.NETオブジェクトには ComVisible(true)属性 を指定する必要があります。
using System; using System.Text; namespace MyNETLib { [System.Runtime.InteropServices.ComVisible(true)] public class MyClass001 { public String Hello() { return "Hellooooo!!!"; } } }
たとえばこのような.NETオブジェクトの場合、