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;
};
C#------------------------------------------------- -----------
構造
[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;
}
//PInvoke
[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
}
エラーが発生しました"Cannot marshal 'return value': Invalid managed/unmanaged type combination (Int/UInt must be paired with SysInt or SysUInt)."