我试图访问(从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?
答案 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
。