2011-05-05 74 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可隨時隨意移動對象。如果您想將託管值傳遞給本地函數,請確保按值或對象傳遞固定。

它可以幫助讀者,如果你發佈你正在得到的實際錯誤信息,而不是從你的問題中猜出來。

相關問題