现在正开发一个视频系统。就是我们开发一套系统出来,以DLL的形式封装了设备生产厂家提供的对设备进行操作的DLL;现在有几个不同的厂家,提供的DLL接口不同,我们用一个DLL把这些接口都封装统一起来,提供给上层程序(如客户端程序)使用,上层只要设置好设备的生产厂家,然后调用我们提供的这个统一的DLL,我们的DLL就可以根据上层程的设置,调用不同厂家的DLL进行处理。即我们提供的DLL起了一个统一接口的容器作用。
问题是,我如何能方便地在程序中判断不同厂家提供的DLL呢?我现在的做法是,在每个函数里,都使用条件判断:
switch(Manuf){
case Manufactur1:
   //调用厂家1的DLL中的函数
   break;
case Manufactur2:
   //调用厂家2的DLL中的函数
   break;
case Manufactur3:
   //调用厂家2的DLL中的函数
   break;
}
在每一个分支里,都用LoadLibrary和FreeLibrary进行对厂家DLL的调用。
这样写,是没问题,就是不灵活,当有一个新厂家提供设备时,我就对每一个函数添加一个case分支了,请问大家有什么好的办法呢?可以动态来添加新厂家,而无需修改代码。
注,现在假设所有设备生产商提供的DLL都在同一个文件内。

解决方案 »

  1.   

    把每个Dll看作是一个对象,每个对象都具有唯一名称以及N个函数指针(用以指向Dll中的函数地址),调用的时候只需找到正确的对象,调用它的成员即可。初略想法。
      

  2.   

    用虚函数啊 
    每个DLL对应一个封装类 从CDllFucBase派生
    然后一个case new不同的封装类 用CDllFucBase指针调用
      

  3.   

    这么危险的活都敢干
    十有八九会陷入泥潭中
    huanyun(无妻徒刑) 说的方法这个方案还行
    最好把dll类封装到一个接口中