Interop.xxx.dll。IDispatch/Dual 介面的 COM 類別。
public object GetActiveXObject(Guid clsid)
{
Type t = Type.GetTypeFromCLSID(clsid);
return t != null ? Activator.CreateInstance(t) : null;
}
Guid jet = new Guid("DE88C160-FF2C-11D1-BB6F-00C04FAE22DA"); // JetEngine
object jetObj = GetActiveXObject(jet);
new ActiveXObject(...)。CoCreateInstance (最靈活、最底層)
[DllImport("ole32.dll", ExactSpelling = true, PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
public static extern object CoCreateInstance(
[In] ref Guid clsid,
[MarshalAs(UnmanagedType.Interface)] object punkOuter,
int context,
[In] ref Guid iid);
IntPtr、object、自訂介面型別)。CoCreateInstance,參數完整控制聚合、上下文、介面查詢。CoInitialize/CoUninitialize。Marshal.GetObjectForIUnknown/GetIUnknownForObject 可在 object 與 IntPtr 互轉。三種方式由高到低封裝層級,視專案需求選擇。