我建了一个dll工程。在下面建了一个文件夹,里面有两个文件MiKi_A.h , MiKi_C.h 两个类//MiKi_A.h
#pragma once
#ifndef MIKIA
#define EXT _declspec(dllexport)
#else
#define EXT _declspec(dllimport)
#endif
class EXT MiKi_A
{
public:
MiKi_A(void);
virtual int add();
public:
virtual ~MiKi_A(void);
};//MiKi_C.h
#pragma once
#define MIKIA
#include "MiKi_A.h"class MiKi_C :public MiKi_A {
public:
MiKi_C(void);
int add(){ return 0; }
public:
virtual ~MiKi_C(void);
};
请问为什么链接的时候会出现错误?
1>MiKi_C.obj : warning LNK4217: locally defined symbol ??1MiKi_A@@UAE@XZ (public: virtual __thiscall MiKi_A::~MiKi_A(void)) imported in function __unwindfunclet$??0MiKi_C@@QAE@XZ$0
1>MiKi_C.obj : warning LNK4217: locally defined symbol ??0MiKi_A@@QAE@XZ (public: __thiscall MiKi_A::MiKi_A(void)) imported in function "public: __thiscall MiKi_C::MiKi_C(void)" (??0MiKi_C@@QAE@XZ)
1>MiKi_A.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall MiKi_A::add(void)" (?add@MiKi_A@@UAEHXZ)
1>D:\Lenka\lenka\Debug\MiKi.dll : fatal error LNK1120: 1 unresolved externals他提示说找不到A的虚函数。我这么分析的:
在MiKi_A.h 编译的时候,#define EXT _declspec(dllexport)
即此时的obj文件是导出文件。
然后在MiKi_C.h文件链接的时候,包含的头文件是EXT _declspec(dllimport)的,好像没问题呀?
#pragma once
#ifndef MIKIA
#define EXT _declspec(dllexport)
#else
#define EXT _declspec(dllimport)
#endif
class EXT MiKi_A
{
public:
MiKi_A(void);
virtual int add();
public:
virtual ~MiKi_A(void);
};//MiKi_C.h
#pragma once
#define MIKIA
#include "MiKi_A.h"class MiKi_C :public MiKi_A {
public:
MiKi_C(void);
int add(){ return 0; }
public:
virtual ~MiKi_C(void);
};
请问为什么链接的时候会出现错误?
1>MiKi_C.obj : warning LNK4217: locally defined symbol ??1MiKi_A@@UAE@XZ (public: virtual __thiscall MiKi_A::~MiKi_A(void)) imported in function __unwindfunclet$??0MiKi_C@@QAE@XZ$0
1>MiKi_C.obj : warning LNK4217: locally defined symbol ??0MiKi_A@@QAE@XZ (public: __thiscall MiKi_A::MiKi_A(void)) imported in function "public: __thiscall MiKi_C::MiKi_C(void)" (??0MiKi_C@@QAE@XZ)
1>MiKi_A.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall MiKi_A::add(void)" (?add@MiKi_A@@UAEHXZ)
1>D:\Lenka\lenka\Debug\MiKi.dll : fatal error LNK1120: 1 unresolved externals他提示说找不到A的虚函数。我这么分析的:
在MiKi_A.h 编译的时候,#define EXT _declspec(dllexport)
即此时的obj文件是导出文件。
然后在MiKi_C.h文件链接的时候,包含的头文件是EXT _declspec(dllimport)的,好像没问题呀?
解决方案 »
- 手势识别初见成效~~~~~收集意见啊
- 关于 XXX.exe 中的 0x00000001 处未处理的异常: 0xC0000005: 读取位置 0x00000001 时发生访问冲突
- 事情内核对象,临介区,互斥对象,各在线程中的作用?
- Socket的ReceiveFrom() 函数收不到UDP包,急!!
- 怎样在CListBox每一项的左边加一个复选框
- 汉字编码问题:如何从内码(char * 类型)转为 unicode码?非windows平台 (就是说用不了MultiByteToWideChar函数)
- CButtonST按钮设置菜单,并使菜单项变灰。
- 谁能给我的这个小程序加个窗口啊?谢了先
- 一個很重要的問題,請各位請指點一下!
- VC工程师用的是sdk还是MFC
- 一幅富有个性、有背景音乐的动画桌面背景如何制作?
- vc 内存使用率不断增加
十分谢谢,但是导出接口的话要怎么访问接口呢?
比如我下面的类如果把add变成为一个纯虚函数,那么MiKi_A就是一个抽象类了,也就是接口。
很显然我如果导出他的话,在另一个exe文件中要使用这个add接口函数,必须先定义一个对象,然后通过对象来调用add,这个对象不就又需要导出他的继承类class MiKi_C来创建么?
最后还不是最底层的实现类被导出来了?
class EXT MiKi_A
{
public:
MiKi_A(void);
virtual int add()=0;
public:
virtual ~MiKi_A(void);
};