我在程序中引用一个DLL,从该DLL的头文件可以看出其中包含3个类A,B,C.其中类B,类C都继承个类A,我在使用的时候可以new类A,但new类B,类C时出现link错误。请问是什么原因?

解决方案 »

  1.   

    ...应该不会吧
    既然.h中包含了B,C的声明,就可以的。
      

  2.   

    #ifndef __KMFCODEC_H
    #define __KMFCODEC_H#include <time.h>class KD_KmfLib
    {
    public:
    typedef struct _VAL_DATA
    {
    int size; //&#44578;??&#46192;?&#44566;&#44541;&#44571;(byte)
    void *data;
    } VAL_DATA;
    typedef struct _KMF_INFO
    {
    char *version;

    char *url; /
    } KMF_INFO; //-------------------------
    // &#44566;&#44590;&#47427;&#48810;?&#47806;&#47852;
    typedef struct _PHRASE_INFO
    {
    char *name;
    int  start;
    } PHRASE_INFO;
    typedef struct _T3G_INFO
    {
    unsigned frequency;


    unsigned channel; PHRASE_INFO phrase_data[3];  } T3G_INFO;};class _KmfEncoder;
    class _KmfDecoder;
    class KD_KmfEncoder : public KD_KmfLib
    {public:

    KD_KmfEncoder(); // &#44578;&#44570;&#44579;&#44619;&#44559;?
    ~KD_KmfEncoder();
    bool SetKmfInfo( const KMF_INFO & kmf_info );
    private:
    _KmfEncoder *context;
    };class KD_KmfDecoder : public KD_KmfLib
    {
    public:

    enum EN_FORMAT 
    {
    FORMAT_ILLEGAL, 
    FORMAT_3G2    
    };

    typedef struct _DECODE_INFO 
    {
    unsigned frame_no;
    unsigned sample_offset;
    unsigned sample_count;

    } DECODE_INFO;
    KD_KmfDecoder(); ~KD_KmfDecoder();
    bool GetT3gData( VAL_DATA & t3g_data ); //t3g(3g2)&#44578;??(OUT)private:
    _KmfDecoder *context;
    };#endif // __KMFCODEC_H
      

  3.   

    link错误可能参数问题。返回值问题。或者函数名问题
      

  4.   

    很奇怪你的类前面不写AFX_EXT_CLASS可以导出?
      

  5.   

    一边的win32动态连接库需要导出类的话,可以用__declspec(dllexport)
    MFC DLL需要 AFX_EXT_CLASS导出引入的时候除了包含头文件,还需要加入相应的.lib文件。
      

  6.   

    一边的win32动态连接库
    ===============
    一般的win32动态链接库
    打错了,不好意思
      

  7.   

    头文件是别人提供的,我只能引用,可为什么我能new KD_KmfLib()呢,而new KD_KmfEncoder(),new KD_KmfEncoder()的时候都出现link错误呢
      

  8.   

    xxx.dll,xxx.h和xxx.lib必须一致,你能保证他们一致么?
      

  9.   

    他们的名字不一样的,我把lib和dll是放在vc98的bin和lib的目录下的,作为内部调用的
      

  10.   

    你把xxx.lib和xxx.dll放在你程序的跟目录下试试.假如你用的不对就会出现你所说的link2001的问题!!
      

  11.   

    头文件是别人提供的,我只能引用,可为什么我能new KD_KmfLib()呢,而new KD_KmfEncoder(),new KD_KmfEncoder()的时候都出现link错误呢

    你这样也行?把这三个类都导出类;__declspecl(dllexport)
    你用depends看一下,dll中是否真的全部导出了这三个类
      

  12.   

    "你用depends看一下" 能具体教我一下吗?谢谢了,刚才对方把头文件该了一下,在定义类的前面都加了__declspecl(dllexport)这句,现在我可以定义一个类变量了(不能new),但调用类方法时还是报link错误,
      

  13.   

    depends是VC自带工具,你用它打开DLL,可以看到导出函数
      

  14.   

    我怀疑这两个类
    class _KmfEncoder;
    class _KmfDecoder;
    没有导出来,如果DLL没有导出来的话,就没有办法了