c# - 将字符串作为 UnmanagedCallersOnly 本机方法的 blittable 类型传递
问题描述
尝试使用 UnmanagedCallersOnly 属性,但我被困在结构中的一些字符串字段上。是否可以对这种可与新的 UnmanagedCallersOnly 属性一起使用的结构进行建模?
C++结构:
struct PluginInfo {
int nStructSize;
int nType;
int nVersion;
char szName[ 64 ];
char szVendor[ 64 ];
};
我在将 szName 和 szVendor 转换为 c# 时遇到了困难。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PluginInfo
{
public int StructSize;
[MarshalAs(UnmanagedType.I4)]
public PluginType Type; // PluginType is an enumeration
public int Version;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)] //[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 64)]
public string Name;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)] //[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 64)]
public string Vendor;
}
public class Plugin
{
[UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvCdecl) })]
public static void GetPluginInfo(ref PluginInfo pluginInfo)
{
pluginInfo.Name = "myPluginName";
pluginInfo.Vendor = "myVendorName";
pluginInfo.Type = PluginType.Data;
pluginInfo.StructSize = Marshal.SizeOf((PluginInfo)pluginInfo);
}
}
错误是“不能将 'PluginInfo' 用作属性为 'UnmanagedCallersOnly' 的方法的参数类型”
解决方案
推荐阅读
- jenkins - 如何通过 Jenkisfile 将环境变量传递给 openshft
- c++ - 构造函数如何创建和初始化成员变量?
- javascript - 如何在没有脚本部分的情况下将 package.json 复制到 dist 文件夹
- python - Python中线性混合效应模型的功效分析
- javascript - 单击按钮后禁用输入字段
- javascript - 如何在for循环中设置react ref
- javascript - 用 Cypress 验证类似的 JSON 结构?
- arrays - C中指针数组的重新分配
- c++ - C ++ getpid()与系统调用(39)?
- python - 使用 pgp 私钥解密音频文件 | Python