从C+将结构数据类型编组为返回类型+;Dll到C#
我在从定义堆栈获取搜索方法的值时遇到问题 从C++ DLL到C语言程序,这里是我的代码 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
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”。