In C# .NET 8 Bei einem nativen Objekt, das eine COM-kompatible Schnittstelle implementiert, und eine C# -Schroit-Definition, wie ich den Zeiger in ein Objekt implementieren kann, das eine solche Schnittstelle implementiert, ohne dass ein integriertes Com-In-COM-BRIMING-BRIMING verwendet wird. tlb.
Ich möchte eine eigenständige Exe veröffentlichen und die Option von .NET verwenden, um die Größe des EXE angemessen zu machen. Ich habe eine Untergruppe von DLLs gefunden, die nicht trimmbar sind, damit die App ausgeführt werden kann. Das erzeugt jedoch immer noch viele Warnungen und glaube, ich glaube, dass sie technisch nicht von .NET nicht unterstützt werden und spätere .NET-Versionen einbrechen können. Ich muss nur eine P/Invoke-Methode aufrufen, die einen Zeiger an ein com-ähnliches Objekt zurückgibt, das der autogenerierten TLB-Schnittstelle entspricht. Wie würde ich diesen Zeiger in ein Objekt konvertieren, das eine bestimmte C# com-kompatible Schnittstelle unter Verwendung von nur durch Trimmen unterstützten Funktionen implementiert? < /P>
Code: Select all
// auto generated from tlb
[ComImport]
[Guid()]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ISomeInterface
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
void method([In][MarshalAs(UnmanagedType.LPWStr)] string input, out int pbData);
...
}
// my (simplified) current code using built in com interop
void GetInstance([MarshalAs(UnmanagedType.Interface)] out object createdObject);
GetInstance(out object comObject);
return comObject as ISomeInterface ?? throw new InvalidOperationException("Failed to create ISomeInterface instance.");