StaC++ |
Отправлено: 07.08.2005, 20:26 |
|
Не зарегистрирован
|
Вот такой кусок кода: (хочу создать БД с помощью ADO)
CODE |
IUnknown* pUnk;
hr = pCF->CreateInstance( NULL, IID_IUnknown, (void**) &pUnk );
pCF->Release();
if ( FAILED( hr ))
{
cout.setf( ios::hex, ios::basefield );
cout << "Failed to create server instance. HR = " << hr << endl;
return -1;
}
cout << "Instance created" << endl;
IDispatch* pDisp = NULL;
hr = pUnk->QueryInterface( IID_IDispatch, (LPVOID*)&pDisp );
pUnk->Release();
if ( FAILED( hr ))
{
cout << "QueryInterface() for IDispatch failed" << endl;
return -1;
}
DISPID dispid;
DISPPARAMS dispparams;
VARIANT value, Connection;
OLECHAR* name = OLESTR("Create");
BSTR arg = BSTR("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\Database\\db1.mdb");
hr = pDisp->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if(FAILED(hr))
{
cout << "GetIDsOfNames() for IDispatch failed" << endl;
return -1;
}
dispparams.rgvarg[0].bstrVal = arg;
dispparams.rgvarg[1].pvarVal = &Connection;
dispparams.cArgs = 2;
dispparams.cNamedArgs = 0;
dispparams.rgdispidNamedArgs = 0;
hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dispparams, &value, NULL, NULL);
if(FAILED(hr))
{
cout << "Invoke() for IDispatch failed" << endl;
return -1;
}
pDisp->Release();
CoUninitialize();
return 0; |
все прекрасно работает до самого главного, т. е. dispid метода Create получаю, а вот инвоке не работает, можь кто подскажет, что не так? |
|
Самому себе |
Отправлено: 08.08.2005, 18:32 |
|
Не зарегистрирован
|
Всё я разобрался, для тех кто полюбопытствовал хотя б, поясню чтоп вызвать invoke() неоходимо создать dispparams.rgvarg = new VARIANTARG(n), где n — количество параметров, а то как же записыват в память и не объявить её , вот так вот на ошибках и учусь. Ладно, спасибо все за внимание. Жаль, что активности на этом форуме мало а так сайт весьма приличный. Вё, пошёл в MSDN online << endl; |
|
|