У меня странная проблема:
структура МФЦ
#define SENSOR_DESC_LEN 30
#define CAM_ID_LEN 20
typedef struct
{
unsigned int SensorType;
char Desc[SENSOR_DESC_LEN];
unsigned int CommType; // USB or TCP - COMM_TYPE
float FirmwareVersion;
float HardwareVersion;
int Width;
int Height;
int ActiveStartX;
int ActiveStartY;
char CameraID[CAM_ID_LEN];
unsigned int pCam;
char Color;
} CAMERA_CAP_API;
соответствующая структура C #:
[StructLayout(LayoutKind.Sequential)]
public struct CAMERA_CAP_API
{
public uint SensorType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]
public byte[] Desc;
public uint CommType;
public float FirmwareVersion;
public float HardwareVersion;
public int Width;
public int Height;
public int ActiveStartX;
public int ActiveStartY;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[] CameraID;
public uint pCam;
public sbyte Color;
} ;
it является правильным - я могу передать эту структуру через DLL, используя следующую подпись:
[System.Runtime.InteropServices.DllImport("Camelot.dll", EntryPoint = "CamGetCamCaps", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
public static extern int CamGetCamCaps(int nCamNum, ref CAMERA_CAP_API CameraCap);
Проблема в ActiveX. (MFC)
Я делаю параметр как VARIANT.
И это показывает как объект на стороне C #.
однако попытка передать ту же структуру объекту не удалась:
object c = new CAMERA_CAP_API();
Camera1.GetCamCaps(ref c); // Camera1 is the ActiveX control
Я получаю следующую ошибку:
Произошло необработанное исключение типа «System.ArgumentException» в mscorlib.dll
Дополнительная информация: значение не попадает в ожидаемый диапазон.
Я также пробовал:
IntPtr ptr = Marshal.AllocCoTaskMem(200);
GetNativeVariantForObject...
Я получаю ту же ошибку.
В чем проблема?