В настоящее время я пытаюсь написать пользовательский интерфейс для системы сбора данных в Visual Studio C ++ 2010, и у меня возникли большие проблемы, связанные с взаимодействием сторонних библиотек, которые я использую, и Windows Forms.Две библиотеки, которые я использую: DAQX, библиотека C для системы сбора данных и VITCam, библиотека C ++ для высокоскоростной камеры 1394.Очень неприятно пытаться работать с этими библиотеками и любой библиотекой пользовательского интерфейса, которую может предложить VS, поскольку ни один из аргументов функции никогда не ладит.
DAQX использует типы окон, такие как WORD и DWORD, в обычном стиле C, икогда я пишу обычную программу, никакой пользовательский интерфейс не работает, она работает нормально, но Windows Forms, кажется, ненавидит всякий раз, когда я хочу создать простой массив DWORD внутри класса.
VITCam еще хуже.Я могу нормально открыть камеру, но полностью теряюсь, когда пытаюсь каким-то образом вывести изображение на экран.Я не раскрыл эквиваланет, простой способ вывести его на экран относительно того, как это изложено в документации:
CDC* pDC=GetDC(); // obtain the device context for your window...
// move the image data
::SetDIBitsToDevice(pDC->m_hDC,0,0,
(int) (MyCam.GetDispBuf()->bmiHeader.biWidth),
(int) (MyCam.GetDispBuf()->bmiHeader.biHeight),
0,0,0,(WORD) (WORD) MyCam.GetDispBuf()->bmiHeader.biHeight,
MyCam.GetDispPixels(),MyCam.GetDispBuf(),
DIB_RGB_COLORS);
Я едва могу следовать этому как есть.Итак, без особых проблем, как большинство людей работают со статическими неуправляемыми библиотеками, которые не были разработаны с учетом форм Windows Forms?Я пробовал MFC, как упоминалось в документации VITCam, но это имеет мало смысла и не настолько интуитивно, как кажется Windows Forms.
Редактировать: это сообщение об ошибке, которое я получаю при попытке использовать обычный(по крайней мере для меня) массив.
Ошибка 1 ошибка C4368: невозможно определить «буфер» как член управляемого «WirelessHeadImpact :: Form1»: смешанные типы не поддерживаются
И это указываетк этой строке:
private:
WORD buffer[BUFFSIZE*CHANCOUNT];
То, что у меня было раньше, было таким:
static array<WORD>^ _buffer;
И внутри функции я создаю первый массив, передаю его функции, а затем возвращаю последний послецикл и обновление массива.
WORD buffer[BUFFSIZE*CHANCOUNT];
DWORD scansCollected = 0;
while (total_scans < SCANS) {
daqAdcTransferBufData(_handle, buffer, BUFFSIZE, DabtmWait, &scansCollected);
if (scansCollected > 0) {
for (WORD i=0;i<scansCollected;i++) {
_buffer[i] = buffer[i];
}