私のC++の関数には次の構造体があります。構造体をC++関数に渡し、いくつかの変更を加えて同じ構造体を返す方法はありますか?
struct Cam
{
char ip[16];
char login[16];
char pass[16];
char name[16];
};
後、私はここで
extern "C" __declspec(dllexport) Cam* AddCameraStruct1(Cam cam)
{
//modify the cam object
}
クラス - 私のCPPから露出している方法であり、私はC#での構造体と関数を定義しています方法です。
[StructLayout(LayoutKind.Sequential)]
internal unsafe struct Cam
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string ip;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string login;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string pass;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string name;
}
[DllImport(@"mydll.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal static extern IntPtr AddCameraStruct1(DPAPI.Cam*);
これをC#で消費する方法はありません。間違っているかどうかをご提案ください。私は、次のエラーを取得しています
unsafe
{
DPAPI.Cam cam = new DPAPI.Cam();
cam.ip = "192.168.0.232";
cam.login = "admin";
cam.pass = "admin";
cam.name = "kekekeke";
DPAPI.Cam* cam1 = (DPAPI.Cam*)DPAPI.AddCameraStruct1(cam);
}
-
ポインタと固定サイズのバッファが
危険な状況でのみ使用することができるが、のアドレスを取るのサイズを取得、またはへのポインタを宣言することはできません管理された型
あなたの質問は不明です。これはどういう意味ですか?「これをC#でどのように消費するのか分かりません」どのようなエラーが出ますか? – nakiya
私の更新された質問をご覧ください。 –