如何不使用内置com interop来使修剪工作在.net

问题描述 投票:0回答:1
I有一个小的C#App(.NET 8),该应用程序通过TLB的自动生成绑定使用COM库。我想发布独立的EXE并使用.NET的修剪选项

<PublishTrimmed>

使Exe的尺寸合理。

.NET内置COM Interop不支持修剪。我找到了一个DLL的子集,可以标记不可技巧以使应用程序运行。但是,这仍然会产生很多警告,我相信从技术上讲,.NET可以在以后的.NET版本中破裂。

com dll实际上并不需要完整的com,而只是使用com兼容的API。我需要的只是调用P/Invoke方法,该方法将指针返回到类似于COM的对象,该对象与自动化的TLB接口匹配。如何将该指针转换为仅使用修剪支持的功能实现特定C#com兼容接口的对象?

// auto generated from tlb [ComImport] [Guid(<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.");

    

simon哀悼者的评论是我使用的答案。我使用

ilspy

将生成的TLB DLL分解为C#。然后,手动伪并在AI的帮助下加快了速度,然后将接口上的属性转换为使用

GeneratedComInterface

而不是
ComImport
。幸运的是,我使用的com界面是相对基本的,因此,不需要自定义编组,这并不困难。
c# com .net-8.0 com-interop
1个回答
1
投票
Https://learn.microsoft.com/en-us/dotnet/dantard/nationard/native-interop/comwrappers-source-source-generation-

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.