DLL中有两个类ClassA  ClassB
class ClassA
{
public:
    FuncA();
};
class _declspec(dllexport) ClassB :public ClassA 
{
public:
    FuncB();
};
请问,外面应用程序使用ClassB生成对象时,能调用FuncA()吗?
我的程序好像编译没问题,但是Link的时候就报错了,不知道该如何处理,请指教

解决方案 »

  1.   

    当然可以了,因为ClassB中有FuncA这个函数了,继承过来的
      

  2.   

    好像不行啊?我测试了一下,用工具看DLL里面确实没有FuncA()啊?
      

  3.   

    我认为ClassB生成的对象是可以调用FuncA()d的。
      

  4.   

    你用工具看到的东西是改名过的东西,当然看不到FuncA了
      

  5.   

    不会吧 我把代码和结果贴出来
    代码:
    class ClassA
    {
    public:
        void FuncA(){};
    };
    class _declspec(dllexport) ClassB : public ClassA 
    {
    public:
        void FuncB(){};
    };
    结果:
    E:\test1\Debug>dumpbin -exports test1.dll
    Microsoft (R) COFF Binary File Dumper Version 6.00.8447
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    Dump of file test1.dllFile Type: DLL  Section contains the following exports for test1.dll           0 characteristics
        467354C9 time date stamp Sat Jun 16 11:11:05 2007
            0.00 version
               1 ordinal base
               2 number of functions
               2 number of names    ordinal hint RVA      name          1    0 00001005 ??4ClassB@@QAEAAV0@ABV0@@Z
              2    1 0000100A ?FuncB@ClassB@@QAEXXZ  Summary        7000 .data
            1000 .idata
            3000 .rdata
            2000 .reloc
           2A000 .textE:\test1\Debug>
      

  6.   

    1    0 00001005 ??4ClassB@@QAEAAV0@ABV0@@Z     <==ClassB
    2    1 0000100A ?FuncB@ClassB@@QAEXXZ          <==FuncB确实没有FuncA啊????
      

  7.   

    刚才测试了一下,你需要将
    classA一样导出才可以的
      

  8.   

    有没有办法不导出ClassA?????????
      

  9.   

    没注意过这种用法
    你试下加上
    class B{
    public:
        using ClassA::FuncA;
    }如果还是不行的就只有把ClassA一起导出,或者在ClassB中另外封装一个方法来调用FuncA
      

  10.   

    using这种方法也不行,看来只有将函数再封装一把了
      

  11.   

    恩,如果你不导出ClassA的话,ClassA::FuncA在Client端同样是不可见的