DllGetClassObject 返回"No such interface supported"而 CoCreateInstance 可以发现它成功
DllGetClassObject return "No such interface supported" while CoCreateInstance can find it successful
我想使用库"sqlceoledb35.dll"来处理.sdf数据库文件而无需寄存器。我知道这个 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
做更多的工作,这是一个关键?
CoCreateInstance
(对于进程内服务器)分两个阶段工作。首先,它加载 DLL 并使用您传递CLSID
调用DllGetClassObject
,请求IClassFactory
接口。其次,它调用IClassFactory::CreateInstance
以这种方式获得的指针,以及您传递的IID
。
DllGetClassObject
知道如何创建的对象 - 类工厂 - 通常本身不会实现除IClassFactory
之外的任何接口,当然还有IUnknown
。
相关文章:
- cmake在我的项目中所需的所有静态库都不成功
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 如何让LLDB在成功时退出,在失败时等待
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 为什么 std::绑定错误参数可以成功?
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 如何检查cURL是否成功登录?c ++
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 未知的 GCC 链接器错误,但已成功构建
- 我的 SonarQube C++扫描成功,但结果仅标记重复项,而没有标记其他标记的位置
- 为什么 LoadLibrary 失败,而 LoadLibraryA 成功加载 DLL?
- 生成成功,但不会给出正确的输出
- 默认/样板代码在Visual Studio 2017中给我错误.E1574.虚幻.但构建成功了
- 即使不包含其标头,如何成功向前声明的类编译?
- CTest 项目目录.未发现任何测试
- C++成功复制动态分配的 obj 而不复制 ctor?
- DllGetClassObject 返回"No such interface supported"而 CoCreateInstance 可以发现它成功