问题描述
尝试使用 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)]
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' 的方法的参数类型”
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)