[out] Pointer to a string identifying the system information.
Тоесть я использовал пример №1. и получил тот же Error
hr = 0x80020009 Exception occurred.
excepinfo = bstrDescription: 0x00176d24 "The parameter is incorrect.
Но я решил проверить пример №2 и два случая
в первом варианте
BSTR szInfo = NULL;
VARIANT vArg0; vArg0.vt=VT_BYREF|VT_BSTR; vArg0.pbstrVal=&szInfo;
я получаю ошибку
hr = 0x8002000e Invalid number of parameters.
во втором варианте
VARIANT vInfo; vInfo.vt=VT_BSTR; vInfo.bstrVal=NULL;
VARIANT vArg0; vArg0.vt=VT_BYREF|VT_VARIANT; vArg0.pvarVal=&vInfo;
я получаю ошибку
hr = 0x8002000e Invalid number of parameters.
Здравствуйте, Shaman Marakame, Вы писали:
SM>Это то как гласит MSDN:
Раз он упоминается в MSDN, то тогда другое дело!
SM>Syntax: SM>HRESULT GetSystemInfo( BSTR* pbstrXMLDoc); SM>Parameters: SM>pbstrXMLDoc SM>[out] Pointer to a string identifying the system information.
И что мы видим? Пример №1 в чистом виде.
SM>Тоесть я использовал пример №1. и получил тот же Error SM>hr = 0x80020009 Exception occurred. SM>excepinfo = bstrDescription: 0x00176d24 "The parameter is incorrect.
Попробуй явно указать тип хранения в Варианте. Это не совсем правильно — все-таки параметр чистый [out], — но может сработать.
SM>Но я решил проверить пример №2 и два случая SM>в первом варианте SM>BSTR szInfo = NULL; SM>VARIANT vArg0; vArg0.vt=VT_BYREF|VT_BSTR; vArg0.pbstrVal=&szInfo; SM>я получаю ошибку SM>hr = 0x8002000e Invalid number of parameters.
SM>во втором варианте SM>VARIANT vInfo; vInfo.vt=VT_BSTR; vInfo.bstrVal=NULL; SM>VARIANT vArg0; vArg0.vt=VT_BYREF|VT_VARIANT; vArg0.pvarVal=&vInfo; SM>я получаю ошибку SM>hr = 0x8002000e Invalid number of parameters.
Это означает, что метод не принимает дополнительные аргументы.
PS
А зачем этот дуальный интерфейс использовать на С++ явно в ущербном виде?! Не проще ли использовать его vtable и вызывать напрямую: