2011-05-05 84 views
2

我目前正在尝试为Visual Studio C++ 2010中的数据获取系统编写用户界面,并且我遇到了很多处理第三方库的接口问题使用和Windows窗体。我使用的两个库是DAQX,一个用于数据采集系统的C库和一个用于1394高速摄像头的C++库VITCam。尝试使用VS所提供的这些库和任何UI库是非常令人沮丧的,因为没有任何函数参数可以相互支持。在非托管静态库中使用Windows窗体和VC++

DAQX使用WORD和DWORD之类的窗口类型,采用普通的C风格,当我编写一个普通的程序时,没有涉及到UI,它工作正常,但Windows窗体似乎恨我随时想做一个简单的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开发的静态非托管库?我已经尝试过MFC,因为VITCam文档提到了它,但它没有多少意义,并且不像Windows窗体那样直观。

编辑: 这是我尝试使用正常(至少对我)数组时得到的错误消息。

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

回答

2

mixed type支持在Visual C++ 2005。如果你想一个DWORD阵列的管理类关联,使用新的(不gcnew)分配本机堆数组本身并保存的指针删除数组。顺便说一句,您无法将托管堆上的对象的地址传递给本地函数而无需固定对象,否则GC可随时随意移动对象。如果您想将托管值传递给本地函数,请确保按值或对象传递固定。

它可以帮助读者,如果你发布你正在得到的实际错误信息,而不是从你的问题中猜出来。

相关问题