CoCreateInstance genaue übereinstimmung in .NET?
Habe ich in-proc (DLL) COM-Server, aber ich ließ mich laufen, wie DllSurrogate, aus diesem Grund von nicht verwaltetem code (Delphi) habe ich:
function TComWrapper.GetServer: IUnknown;
begin
OleCheck(CoCreateInstance(ServerData^.ClassId, nil, CLSCTX_LOCAL_SERVER, IUnknown, Result));
end;
C# verwende jetzt:
[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);
Obige code ist unsicher.
Tut es existiert sicher version her über CoCreateInstance
?
Es scheint, dass Activator.CreateInstance
hilft mir nicht. Ich habe ausdrücklich Kontext (3. parameter)
- Es gibt nichts, unsicher über die richtige pinvoke Erklärung. Beachten Sie, wie Sie nie gehabt zu verwenden, die unsafe-Schlüsselwort irgendwo.
- also, die Verpackung
CoCreateInstance
imunsafe{...}
nutzlos ist? - Sie können nicht nur führen Sie es als eine COM-Komponente in Ihrem code?
- ja.
unsafe
Blöcke sind grundsätzlich für unsicher-Zeiger-manipulation und bist du nicht jedem tut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man dies auch tun:
und erstellen Sie eine Instanz des COM-Objekts, wie diese:
Ohne die mithilfe von p/invoke.