В C# .NET 8 Указан указатель (INTPTR) на истинный объект, реализующий компонентный интерфейс COM и определение интерфейса C#, как мне преобразовать указатель в объект, реализующий такой интерфейс без использования встроенного COM для включения COM, чтобы включить Com, чтобы включить обрезка? TLB. Я хотел бы опубликовать отдельный EXE и использовать опцию обрезки .NET , чтобы сделать размер EXE разумным. обрезка. Я нашел подмножество DLL, чтобы отметить, что приложение запустило приложение. Тем не менее, это все еще генерирует много предупреждений, и я считаю, что технически не поддерживается .NET и могу проникнуть в более поздние версии .NET. Просто использует Com-совместимый API. Все, что мне нужно,-это вызвать метод P/invoke, который возвращает указатель на COM-подобный объект, который соответствует автогенерируемому интерфейсу TLB. Как я бы преобразовал этот указатель в объект, реализующий конкретный C# Com-совместимый интерфейс, используя только функции, поддерживаемые обрезкой? < /P>
// 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
GetInstance(out object comObject);
return comObject as ISomeInterface ?? throw new InvalidOperationException("Failed to create ISomeInterface instance.");
Подробнее здесь: https://stackoverflow.com/questions/794 ... ork-in-net