将无符号整数从C ++ COM对象传递给VB6

时间:2011-09-22 20:49:40

标签: c++ com 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>这两种方法的提示。

有没有办法将无符号整数数据类型传递给VB6?

2 个答案:

答案 0 :(得分:3)

VB6没有无符号数据类型。 COM对象是你的吗?只需将界面更改为常规的signed int即可。你真的有宽度和高度超过20亿的图像吗?

如果COM对象不是你的,抱歉,它的界面不符合自动化。您可以组合一个代理C ++对象,将所有unsigned转换为int

答案 1 :(得分: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