簡體   English   中英

將無符號整數從C ++ COM對象傳遞到VB6

[英]Passing unsigned integers from C++ COM object to VB6

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

...
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>顯示Function GetWidth() As <Unsupported variant type>提示。

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

VB6沒有無符號的數據類型。 COM對象是您的嗎? 只需將接口更改為常規的帶符號的int即可。 您是否真的擁有寬度和高度超過20億的圖像?

如果COM對象不是您的,則對不起,它的接口不符合自動化要求。 您可以將一個代理C ++對象放在一起,該對象會將所有unsigned的對象轉換為int的對象。

以下是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,這也是常見的),並且該設置足夠靈活,可以涵蓋很多情況。

在您的特殊情況下,您需要使用LONG類型的VT_I4

在 VB6

[英]Using IUnknown derived C++ COM object in VB6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM