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 im unsafe{...} 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.
InformationsquelleAutor ALZ | 2013-04-13
Schreibe einen Kommentar