我已經在進程內(DLL)COM服務器,但我落戶作爲DllSurrogate運行,爲此從非託管代碼(德爾福)我有:CoCreateInstance在.NET中完全匹配?
function TComWrapper.GetServer: IUnknown;
begin
OleCheck(CoCreateInstance(ServerData^.ClassId, nil, CLSCTX_LOCAL_SERVER, IUnknown, Result));
end;
從C#現在使用:
[DllImport("ole32.dll", EntryPoint = "CoCreateInstance", CallingConvention = CallingConvention.StdCall)]
static extern UInt32 CoCreateInstance([In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
IntPtr pUnkOuter, UInt32 dwClsContext, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid,
[MarshalAs(UnmanagedType.IUnknown)] out object rReturnedComObject);
...
UInt32 dwRes = CoCreateInstance(ClassIdGuid,
IntPtr.Zero,
(uint)(CLSCTX.CLSCTX_LOCAL_SERVER), //if OR with CLSCTX_INPROC_SERVER then INPROC Server will be created, because of DLL COM Server
IUnknownGuid,
out instance);
上面的代碼是不安全的。 它是否存在以上安全版本CoCreateInstance
以上? 看來,Activator.CreateInstance
不幫助我。我必須設定明確的運行上下文(第三個參數)
沒有什麼不安全的關於正確的pinvoke聲明。請注意,您從來不必在任何地方使用* unsafe *關鍵字。 –
@HansPassant,這樣''CoCreateInstance'在'unsafe {...}'中包裝是沒用的? – ALZ
你不能在代碼中將它作爲COM組件運行嗎? –