我有一個COM對象,我試圖從C++(不是.NET)使用,並且所有的示例程序和手冊都是假定使用的C#.NET或VB.NET。 COM對我來說是新的,所以我有點不知所措。我在TLB上使用#import,但我正在努力處理用作參數的變體。我有一個特定的方法,根據文檔和C#.NET中的示例程序,應該返回一個對象[]。然後,我應該將這個數組中的第一個條目轉換爲ControlEvent,然後告訴我如何處理數組中的其餘對象。在C#.NET示例如下:在C#.NET中使用C++中的COM對象返回對象[]
object [] objEvent = (object []) Ctl.GetEvent();
ControlEvent ev = (ControlEvent) objEvent[0];
在我的情況,GetEvent將返回我一個_variant_t,我需要知道如何將其轉換爲一個Object [],這樣我可以進一步處理。它對我來說並不清楚,即使我用C++表達'對象'。我看到_variant_t文檔向我展示了我可以將變體轉換爲的一百萬個事物,但是他們中沒有一個似乎轉換爲我可以使用的任何東西。我希望有一些幫助將上面的C#.NET代碼轉換爲Visual C++
謝謝。
謝謝,我想你已經讓我走上正軌。 VT是VT_ARRAY || VT_VARIANT,我從API調用中返回一個帶有兩個元素的SafeArray,每個元素都是一個VT_I4。然而,兩者的lVal都爲零,所以我仍然堅持我應該如何將這些VT_I4變成指向對象的指針 – bdk 2009-08-30 03:38:22
你可以顯示你用來檢索'SAFEARRAY'元素並獲得'VT_I4'的代碼嗎? – 2009-08-30 03:56:18
_variant_t v = m_pCtl-> getNextEvent() printf(「Variant Type is%x \ n」,v.vt); [打印0x200c]] _variant_t項 LONG IDX = 0 HRESULT HR = SafeArrayGetElement(v.parray,&IDX,和項目) 如果(小時== S_OK) 的printf( 「元素類型是:%d \ n」 個, item.vt); [[打印3]] – bdk 2009-08-30 04:12:20