|
- STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID* ppv)
- {
- IUnknown* pIFactory = NULL;
-
- HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
-
- if (CLSID_SC_BASENETWORK_DLL == rclsid)
- {
- hr = E_OUTOFMEMORY;
- pIFactory = new CSC_BaseNetworkFactory;
- if (pIFactory) //liuwei 此处工厂模式获取实例接口为空,
- {
- hr = pIFactory->QueryInterface(riid,ppv);
- if (FAILED(hr))
- {
- delete pIFactory;
- pIFactory = NULL;
- }
- }
- }
- return hr;
- }
复制代码
可以使用接口注入,这也是IOC和DI思想,控制反转和依赖注入的使用方式。
- STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID* ppv)
- {
- CSC_BaseNetworkFactory pFactory;
- IUnknown* pIFactory = NULL;
- return pFactory.CreateInstance(pIFactory,riid,ppv);
- }
复制代码
以上三种方式都能结果,VC6.0/vs2003 移植到vs2010以上IDE 遇到的Dll 获取实例化接口出现异常的解决方法,推荐使用1和3,第二种不建议使用,如果出现其他游戏也导入了同样的CLSID的Dll, 如果Dll作为共享DLL方式使用的话, 可能数据包会异常。建议使用第1种和第3种方式。
|
|