我想使用库“sqlceoledb35.dll”来处理.sdf db文件而无需注册。我知道这个 dll 是一个 COM dll 并在 ADO 中使用。
但我无法获取目标接口,它返回错误“不支持此类接口”。
这是代码:
CoInitialize(nullptr);
HMODULE hmod = CoLoadLibrary((L"sqlceoledb35.dll"), true);
DllGetClassObject_t pDllGetClassObject =(DllGetClassObject_t)GetProcAddress(hmod, "DllGetClassObject");
HRESULT hr=NOERROR;
IDBInitialize *pIDBInitialize1=NULL;
IDBInitialize *pIDBInitialize2=NULL;
hr = pDllGetClassObject(CLSID_SQLSERVERCE_3_5, __uuidof(IUnknown), (void**)&pIDBInitialize1);
hr = pDllGetClassObject(CLSID_SQLSERVERCE_3_5, IID_IDBInitialize, (void**)&pIDBInitialize2);
但是在这个代码片段中,_uuidof(IUnknow)
可以返回一个接口成功,但IID_IDBInitialize
会失败(这个IID可以工作CoCreateInstance
,你稍后会看到。
这是另一个可以在具有相同接口 IID 的同一台机器上正常工作的代码:
CoInitialize(nullptr);
hr = CoCreateInstance( CLSID_SQLSERVERCE_3_5,
0,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void**)&pIDBInitialize);
所以任何人都可以提供帮助,以便第一个代码片段可以工作?
那么该方法CoCreateInstance
是否做了更多的工作,这是一个关键?