找回密码
 立即注册
查看: 40|回复: 0

vs2003 C++ 移植 vs2010 C++ 工厂模式接口请求实例出现的问题

[复制链接]

15

主题

2

回帖

81

积分

管理员

积分
81
发表于 6 天前 | 显示全部楼层 |阅读模式
  1. STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID* ppv)
  2. {
  3.     IUnknown* pIFactory = NULL;

  4.         HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
  5.    
  6.         if (CLSID_SC_BASENETWORK_DLL == rclsid)
  7.         {
  8.       hr = E_OUTOFMEMORY;
  9.       pIFactory = new CSC_BaseNetworkFactory;
  10.       if (pIFactory)   //liuwei 此处工厂模式获取实例接口为空,
  11.       {
  12.           hr = pIFactory->QueryInterface(riid,ppv);
  13.           if (FAILED(hr))
  14.           {
  15.                delete pIFactory;
  16.                pIFactory = NULL;
  17.           }
  18.       }
  19.         }
  20.         return hr;
  21. }
复制代码



可以使用接口注入,这也是IOC和DI思想,控制反转和依赖注入的使用方式。

  1. STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID* ppv)
  2. {
  3.         CSC_BaseNetworkFactory pFactory;

  4.         IUnknown* pIFactory = NULL;

  5.         return pFactory.CreateInstance(pIFactory,riid,ppv);
  6. }
复制代码


以上三种方式都能结果,VC6.0/vs2003 移植到vs2010以上IDE 遇到的Dll 获取实例化接口出现异常的解决方法,推荐使用1和3,第二种不建议使用,如果出现其他游戏也导入了同样的CLSID的Dll, 如果Dll作为共享DLL方式使用的话, 可能数据包会异常。建议使用第1种和第3种方式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软件开发编程门户 ( 陇ICP备2024013992号-1|甘公网安备62090002000130号 )

GMT+8, 2024-12-5 10:37 , Processed in 0.382628 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表