2011-09-22 72 views
0

我試圖訪問(從VB6應用程序)由C++ COM對象的方法返回的無符號32位整數數據類型。接口部分聲明如下:將無符號整數從C++ COM對象傳遞到VB6

... 
interface ICOMCanvasPixelBuffer : IUnknown 
{ 
    HRESULT GetWidth([retval][out] DWORD *pWidth); 
    HRESULT GetHeight([retval][out] unsigned __int32 *pHeight); 
    ... 

當我瀏覽使用VB6的Object Browser這個接口,它顯示Function GetWidth() As <Unsupported variant type>暗示了這兩種方法。

有沒有辦法將無符號整數數據類型傳遞給VB6?

+1

很難想象爲什麼作者甚至不屑爲它生成一個類型庫。後期綁定也不存在,只有在實現IDispatch時纔有效。 –

+0

@Hans,COM對象是我的,所以我需要生成一個tlb以在VB6中使用此對象。 – ezpresso

回答

3

VB6沒有無符號數據類型。 COM對象是你的嗎?只需將接口更改爲常規的帶符號整數。你真的有寬度和高度超過20億的圖像?

如果COM對象不是你的,對不起,它的接口不符合自動化標準。你可以放置一個代理C++對象,將所有unsigned的轉換爲int的。

1

這裏是Wnidows SDK的摘錄這是非常有幫助的瞭解要使用哪種類型:

enum VARENUM { 
    VT_EMPTY = 0, 
    VT_NULL = 1, 
    VT_I2 = 2, 
    VT_I4 = 3, 
    VT_R4 = 4, 
    VT_R8 = 5, 
    VT_CY = 6, 
    VT_DATE = 7, 
    VT_BSTR = 8, 
    VT_DISPATCH = 9, 
    VT_ERROR = 10, 
    VT_BOOL = 11, 
    VT_VARIANT = 12, 
    VT_UNKNOWN = 13, 
    VT_DECIMAL = 14, 
    VT_I1 = 16, 
    VT_UI1 = 17, 
    VT_UI2 = 18, 
    VT_UI4 = 19, 
    // on and on 

你是絕對安全停留超過16(與可能VT_ARRAY | VT_UI1的字節數組,這也是常見),而且這個集合足夠靈活,可以覆蓋很多場景。

在您的特殊情況下,您需要VT_I4這是類型LONG