我利用directshow实现了一个文件格式转换的模块,写成一个c++类Func,现在想把这个类封装到
一个dll中,但是调用directshow,实际上是调用com接口。
    现想:
    (1)彻底封装directshow相关com接口到自己的dll中,可行否?我是没有实现。
    (2)只把类封装到dll中,实际上就是隐藏一下代码,并非真正的com。
         写一个mfc应用程序,直接调用Func类,一切ok,当然要在CXXX:InitInstance()
         中调用CoInitialize(NULL),以及释放工作。
         如果把Func做到dll中,应用程序再去调用时,发现CoInitialize(NULL)不起作用,不论
         把它放在应用程序中还是dll中,都不行,直接导致Func类中调用directshow中com接口时
         失败。请大家给点建议。

解决方案 »

  1.   

    我用ADO(基于COM接口)写数据库exe时,在exe中使用的是AfxOleInit();一切正常。
    用ADO写数据库DLL时,在DLl中使用AfxOleInit();如果用VB6.0的exe调此DLL,则没有问题,
    如果用MFC的exe调此DLL,则提示没有执行CoInitialize(NULL);在DLL中加上此代码就OK了。
    还有一种方法是直接在MFC的exe中写AfxOleInit();在DLL中什么都不写,也可以调用成功。
    因为AfxOleInit();在整个应用程序中只需执行一次,且不用卸载。
    上面是我的经验,不知对不对。反正我这么做没有出错。
    我使用的是Visual C++ .NET 2003 和Visual Basic 6.0
      

  2.   

    CoInitialize()
    CoUnInitialize()都放到dll中