织梦制作wap网站,城建网官网12319,找企业案例的网站,wordpress需要登录才可以看到内容项目场景#xff1a;
VS2022 .NET8 #xff0c; 项目应用的库需要支持AOT#xff0c;不支持AOT的库看这里 我的c项目很奇怪#xff0c;如果使用 clr 调用c# dll,会有很多报错#xff0c;所以使用 P/Invoke方法#xff0c;这个方法不会有任何奇怪的报错 解决方案
示例…项目场景
VS2022 .NET8 项目应用的库需要支持AOT不支持AOT的库看这里 我的c项目很奇怪如果使用 clr 调用c# dll,会有很多报错所以使用 P/Invoke方法这个方法不会有任何奇怪的报错 解决方案
示例代码
using System.Runtime.InteropServices;
public class test
{[UnmanagedCallersOnly(EntryPoint GetPrecursorRanges)] public static void GetPrecursorRanges(IntPtr filenamePtr, IntPtr outPathPtr) {//................}[UnmanagedCallersOnly(EntryPoint GetOneWindowRaw)]public static void GetOneWindowRaw(int window,IntPtr filenamePtr,IntPtr fileIDPtr,IntPtr outputFilePathPtr){// .................}
}vs要配置项目 打开项目的配置文件.csproj 检查是不是X64平台 还要添加 PublishAottrue/PublishAot 然后在vs中生成解决方案打开 把工作目录切换到项目中比如这个路径要看见csproj 然后输入 dotnet publish -p:NativeLibShared -r win-x64 -c Release 在这里面会提示一些基本的信息和报错一般是库的版本不支持P/Invoke解决之后正常运行出来会看见dll输出的目录至此大功告成 但是这个方案会有局限如果项目中调用了一些COM的库是不能用此方案生成dll这种情况的报错如下。
COM Interop requires ComWrapper instance registered for marshalling.解决方案参考另外一篇用C/CLI解决的