1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| static public int lLogin;
public delegate void fDisConnect(int lLoginID, IntPtr pchDVRIP, int nDVRPort, uint dwUser);
public delegate void fHaveReConnect(int lLoginID, IntPtr pchDVRIP, int nDVRPort, uint dwUser);
[DllImport("dhnetsdk.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int CLIENT_Login(string pchDVRIP, ushort wDVRPort, string pchUserName, string pchPassword, NET_DEVICEINFO lpDeviceInfo, IntPtr error);
[DllImport("dhnetsdk.dll", CallingConvention = CallingConvention.Cdecl)]
//[return: MarshalAs(UnmanagedType.I1)]
public static extern bool CLIENT_Init(fDisConnect cbDisConnect, uint dwUser);
[StructLayout(LayoutKind.Sequential)] //Je ne sais pas vraiment à quoi sert le sequential :? ?
public class NET_DEVICEINFO
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
public byte[] sSerialNumber;
public byte byAlarmInPortNum;
public byte byAlarmOutPortNum;
public byte byDiskNum;
public byte byDVRType;
public byte byChanNum;
}
fDisConnect fDisConnecthandler = fDisConnectMethod;
fHaveReConnect fHaveReConnecthandler = fHaveReConnectMethod;
NET_DEVICEINFO deviceinfo = new NET_DEVICEINFO();
IntPtr iRet = new IntPtr(0);
CLIENT_Init(fDisConnectMethod, 0); //A cette ligne je reçois l'erreur :
//PInvokeStackImbalance a été détecté
//Message: Un appel à la fonction PInvoke 'WindowsFormsApplication1!WindowsFormsApplication1.Form1::CLIENT_Init' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke
//managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.
lLogin = CLIENT_Login("256.256.256.256", 00000, "name", "pwd", deviceinfo, iRet);
if (lLogin > 0)
{
//Blabla
}
else
Console.WriteLine("Login device failed"); |
Partager