从C+将结构数据类型编组为返回类型+;Dll到C#

从C+将结构数据类型编组为返回类型+;Dll到C#,c#,c++,data-structures,marshalling,dllimport,C#,C++,Data Structures,Marshalling,Dllimport,我在从定义堆栈获取搜索方法的值时遇到问题 从C++ DLL到C语言程序,这里是我的代码 C++-------------------------------------------------------------- extern "C" __declspec(dllexport) userCredential CallStackSeach(StackUser* pObject, userCredential item) { return pObject->search(item

我在从定义堆栈获取搜索方法的值时遇到问题 从C++ DLL到C语言程序,这里是我的代码

C++--------------------------------------------------------------

extern "C" __declspec(dllexport) userCredential CallStackSeach(StackUser* pObject, userCredential item)
{
    return pObject->search(item);
}
结构

typedef struct userInfo
{
    char* firstName;
    char* middleName;
    char* lastName;
    char* address;
    char* email;
};


typedef struct userCredential
{
    char* username;
    userInfo person;
    char* password;
    bool admin;

};
[StructLayout(LayoutKind.Sequential)]
public struct userInfo
{
    [MarshalAs(UnmanagedType.LPStr)]
    public string firstName;
    [MarshalAs(UnmanagedType.LPStr)]
    public string middleName;
    [MarshalAs(UnmanagedType.LPStr)]
    public string lastName;
    [MarshalAs(UnmanagedType.LPStr)]
    public string address;
    [MarshalAs(UnmanagedType.LPStr)]
    public string email;
}
[StructLayout(LayoutKind.Sequential)]
public struct userCredential
{
    [MarshalAs(UnmanagedType.LPStr)]
    public string username;
    [MarshalAs(UnmanagedType.Struct)]
    public userInfo person;
    [MarshalAs(UnmanagedType.LPStr)]
    public string password;
    [MarshalAs(UnmanagedType.Bool)]
    public bool admin;
}
C#------------------------------------------------------------

extern "C" __declspec(dllexport) userCredential CallStackSeach(StackUser* pObject, userCredential item)
{
    return pObject->search(item);
}
结构

typedef struct userInfo
{
    char* firstName;
    char* middleName;
    char* lastName;
    char* address;
    char* email;
};


typedef struct userCredential
{
    char* username;
    userInfo person;
    char* password;
    bool admin;

};
[StructLayout(LayoutKind.Sequential)]
public struct userInfo
{
    [MarshalAs(UnmanagedType.LPStr)]
    public string firstName;
    [MarshalAs(UnmanagedType.LPStr)]
    public string middleName;
    [MarshalAs(UnmanagedType.LPStr)]
    public string lastName;
    [MarshalAs(UnmanagedType.LPStr)]
    public string address;
    [MarshalAs(UnmanagedType.LPStr)]
    public string email;
}
[StructLayout(LayoutKind.Sequential)]
public struct userCredential
{
    [MarshalAs(UnmanagedType.LPStr)]
    public string username;
    [MarshalAs(UnmanagedType.Struct)]
    public userInfo person;
    [MarshalAs(UnmanagedType.LPStr)]
    public string password;
    [MarshalAs(UnmanagedType.Bool)]
    public bool admin;
}
//平沃克

[DllImportAttribute("SystemMISO,dll", CallingConvention = CallingConvention.Cdecl, EntryPoint="CallStackSearch")]
[return: MarshalAs(UnmanagedType.LPStruct)]
static private extern IntPtr CallStackSeach(IntPtr pObejct, userCredential item);
//函数包装器

public userCredential StackSeach(userCredential item)
{         
   var ptr = CallStackSeach(this.ptrObject,item);
   return (userCredential)Marshal.PtrToStructure(ptr, typeof(userCredential));
   //occur error
}

“无法封送‘返回值’:无效的托管/非托管类型组合(Int/UInt必须与SysInt或SysUInt配对)时出错。”

是否从代码中复制?因为您的方法名称中似乎缺少一个“r”。