Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DllGetClassObject返回“;不支持此类接口”;而CoCreateInstance可以发现它是成功的_C++_Dll_Com_Sql Server Ce_Sqlcedatareader - Fatal编程技术网

C++ DllGetClassObject返回“;不支持此类接口”;而CoCreateInstance可以发现它是成功的

C++ DllGetClassObject返回“;不支持此类接口”;而CoCreateInstance可以发现它是成功的,c++,dll,com,sql-server-ce,sqlcedatareader,C++,Dll,Com,Sql Server Ce,Sqlcedatareader,我想使用库“sqlceoledb35.dll”来处理.sdf db文件而不使用寄存器。我知道这个dll是一个COM dll,在ADO中使用。 但我无法获取目标接口,它返回错误“不支持此类接口” 下面是代码: CoInitialize(nullptr); HMODULE hmod = CoLoadLibrary((L"sqlceoledb35.dll"), true); DllGetClassObject_t pDllGetClassObject =(DllGetClas

我想使用库“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);
但是在这个代码片段中,
\u uuidof(IUnknow)
可以返回一个接口成功,但是
IID\u idbidalize
将失败(这个IID可以在
CoCreateInstance
中工作,您稍后将看到)。

这是另一个可以在具有相同接口IID的同一台机器上正常工作的代码:

    CoInitialize(nullptr); 
    hr = CoCreateInstance(  CLSID_SQLSERVERCE_3_5, 
                        0, 
                        CLSCTX_INPROC_SERVER, 
                        IID_IDBInitialize, 
                        (void**)&pIDBInitialize);
因此,任何人都可以提供帮助,以便第一个代码段可以工作?

那么,方法
CoCreateInstance
是否做了更多的工作,这是一个关键?

CoCreateInstance
(对于进程服务器)工作分两个阶段。首先,它加载DLL并使用传递的
CLSID
调用
DllGetClassObject
,请求
IClassFactory
接口。其次,它使用传递的
IID
调用由此获得的指针上的
IClassFactory::CreateInstance

DllGetClassObject
知道如何创建的对象—类工厂—通常不会实现除
IClassFactory
之外的任何接口,当然,
IUnknown

此链接也很有用