ライブラリ「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
はキーとなるより多くの作業を行いましたか?