最近对一些旧案子进行规整,发现很多dll都是句柄类等导出类。
归纳了一下:
1,类结构相同或者类似;
2,程序语言是C++,VC6编译;目前程序主体对这些DLL的调用繁多而且散乱,这对于程序的整体结构相当不利。所以想借用C#的思想,对这些类归纳建立一个namespace的类库,程序主体直接using namespace就可以了。现在的问题是:
以前是使用直接dllexport出去这些类,程序主体dllimport其lib等即可。而现在使用namespace建立的dll却不知该如何导出与被引用?PS:
1,我直接#import "a.dll"缺是不行的。
2,程序主体是VC程序而不是.net程序。

解决方案 »

  1.   

    namespace只能避免名称冲突,DLL依旧是要导出类,使用者要包含头文件和导入lib,可以using namespace,也可以用空间名加双冒号来访问。
      

  2.   

    定义:
    namespace xyz
    {
       class abc
       {
       };
    }使用:
    1.
    xyz::abc2.
    using namespace xyz;
    abc
      

  3.   

    #import是导入类型库的,不是对DLL的引用,应该用LoadLibrary加载DLL。
      

  4.   

    #import只是导入(COM)类型库信息而已,没有加载DLL
      

  5.   

    #import导入的是类型库,不是dllusing namespace xxx;
    abc;

    xxx::abc;
      

  6.   

    那么各位对这种现象有什么idea么?
    我最主要的思想是统一对外接口而已...
      

  7.   

      这个接口是个大工程,看了楼上几位关于#import 和 Loadlibray 的区别后我就晕乎了。学习。
      

  8.   

    楼上几位都说的很清楚了,不知道楼主要的思路是什么?1.要导出类,使用mfc 扩展dll.
    2.定义要导出的类,使用class AFX_EXT_CLASS  CDemoClass方式类定义类。
    3.使用namespace来定义命名空间.如
    namespace Demo
    {
      class AFX_EXT_CLASS  CDemoClass
      {
         ...
      };
    }使用的话,方法和常规的一致.
    1.#include "xxx.h"
    #pragma comment(lib, "xxx.lib")2.命名空间::类
    Demo::CDemoClass dc;
    dc.function.
      

  9.   

    你的类包含于命名空间就可以了,命名空间不存在导出的问题..h
    #pragma once
    namespace Deom
    {
       class AFX_EXT_CLASS x
       {};
    }.cpp
    #include ".h"
    namespace Deom
    {
      x::x()
      {
      }
      x::otherfunction()
      {
      }
    }
      

  10.   

    楼主可以试试,创建一个扩展dll,一个测试程序,试试就了解了。
      

  11.   

    怕麻烦就全部不要LoadLibrary了 编译的时候指定.lib文件
    加一个delayload的开关 就不会一开始就全加载
      

  12.   

    接口的问题是架构设计问题,这个应该在coding之前就设计好的。楼主现在程序都做好了,那就别折腾了。