2011-05-05 2 views
2

현재 Visual Studio C++ 2010에서 데이터 획득 시스템 용 UI를 작성하려고하고 있으며 제 3 자 라이브러리의 인터페이스를 다루는 데 많은 어려움을 겪고 있습니다. 사용 및 Windows Forms. 내가 사용하고있는 두 라이브러리는 DAQX, Data Acquestion System 용 C 라이브러리 및 1394 고속 카메라 용 C++ 라이브러리 인 VITCam입니다. 함수 인수가 없기 때문에 VS가 제공해야하는 이러한 라이브러리 및 UI 라이브러리로 작업하는 것은 매우 실망 스럽습니다.비 관리 정적 라이브러리와 함께 Windows Forms 및 VC++ 사용

DAQX는 일반 C 방식으로 WORD 및 DWORD와 같은 Windows 유형을 사용하고 정상적인 프로그램을 작성할 때 UI는 포함되지 않지만 잘 작동하지만 Windows Forms는 언제든지 간단한 DWORD를 만들고 싶어합니다. 클래스 내부의 배열.

VITCam이 더 나쁩니다. 나는 카메라를 잘 열어도되지만, 어떻게 든 화면에 이미지를 넣으려고 할 때 나는 완전히 잃어버린다. 나는 문서를 박았 방법으로 화면에 넣어위한 방법을 따르으로 쉽게 equivalanet을 발견하지 않은 : 그대로

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을 염두에두고 개발되지 않은 정적 인 관리되지 않는 라이브러리로 대부분의 사람들이 어떻게 작업합니까? VITCam 문서에서 언급했듯이 MFC를 사용해 보았지만 Windows Forms만큼이나 직관적이지는 않습니다.

편집 : 정상적인 (적어도 나에게) 배열을 사용하려고 할 때 나타나는 오류 메시지입니다.

오류 1 오류 C4368 : 관리 'WirelessHeadImpact :: Form1에'의 멤버로 '버퍼'정의 할 수 없습니다 : 혼합 유형

지원 그리고 그것은이 라인을 가리키는되지 않습니다

private: 
WORD buffer[BUFFSIZE*CHANCOUNT]; 

무엇 I 전에이 있었다 있었다 :

static array<WORD>^ _buffer; 

및 함수 I에서 다음으로 반복하고 ARRA를 업데이트 한 후, 후자를 반환 함수에 전달, 전자 배열을 만들 와이.

  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]; 
        } 

답변

2

mixed type 지원 관리되는 클래스에 DWORD 배열을 연결하려는 경우 2005 년, 네이티브 힙에 배열 자체를 할당의 포인터를 저장 (gcnew되지 않음) 새로운 사용 Visual C++에서 제거 클래스의 배열.

그런데 개체를 고정하지 않고 관리되는 힙의 개체 주소를 기본 함수로 전달할 수 없습니다. 그렇지 않으면 GC는 언제든지 개체를 자유롭게 이동할 수 있습니다. 관리되는 값을 네이티브 함수에 전달하려면 값 또는 객체 전달이 고정되어 있는지 확인하십시오.

귀하의 질문에서 추측 할 필요없이 실제 오류 메시지를 게시하면 독자가 도움이됩니다.

관련 문제