In C# .NET 8 Bei einem nativen Objekt, das eine COM-kompatible Schnittstelle implementiert, und eine C# -Schrobtomit-Definition, wie ich den Zeiger in ein Objekt implementieren kann, das eine solche Schnittstelle implementiert, ohne integrierte COM zu aktivieren, um einen Zeiger (IntPTR) und eine C# -Schroominierungsdefinition zu übergeben Trimmen? tlb. Ich möchte eine eigenständige Exe veröffentlichen und die Option von .NET von .NET verwenden, um die Größe des EXE vernünftig zu gestalten. Trimmen. Ich habe eine Untergruppe von DLLs gefunden, die nicht trimmbar sind, damit die App ausgeführt werden kann. Dies erzeugt jedoch immer noch viele Warnungen und glaube, ich glaube, technisch nicht unterstützt von .NET und kann später .NET -Versionen einbrechen. Verwendet nur eine com-kompatible API. 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.");