相关疑难解决方法(0)

为什么DllImport for C bool as UnmanagedType.I1抛出但是作为字节工作

这是一个简单的C代码(VS 2013 C++项目,"编译为C"):

typedef struct {
    bool bool_value;
} BoolContainer;

BoolContainer create_bool_container (bool bool_value)
{
    return (BoolContainer) { bool_value };
}
Run Code Online (Sandbox Code Playgroud)

这是我的P/Invoke包装器

public partial class NativeMethods
{
    [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)]
    public static extern BoolContainer create_bool_container([MarshalAs(UnmanagedType.I1)] bool bool_value);
}
Run Code Online (Sandbox Code Playgroud)

以下是托管版本BoolContainer:

首先是投掷MarshalDirectiveException: Method's type signature is not PInvoke compatible.:

public struct BoolContainer // Marshal.SizeOf(typeof(BoolContainer)) = 1
{
    [MarshalAs(UnmanagedType.I1)] // same with UnmanagedType.U1
    public bool bool_value;
}
Run Code Online (Sandbox Code Playgroud)

第二是工作:

public struct BoolContainer // Marshal.SizeOf(typeof(BoolContainer)) = 1
{
    public byte …
Run Code Online (Sandbox Code Playgroud)

c c# pinvoke boolean visual-studio-2013

4
推荐指数
1
解决办法
2164
查看次数

标签 统计

boolean ×1

c ×1

c# ×1

pinvoke ×1

visual-studio-2013 ×1