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