我目前正在尝试为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];
}