修改头文件为什么不影响导出动态库的调用

时间:2022-06-12 09:26:46
有一个导出库test,提供了test.h  test.lib   test.dll

//*****************test.h**********************
#include "aaa.h"
class AFX_EXT_CLASS Ctest
{
public:
...

char * m_szPath;

BOOL Init(void);
void Quit(void);
BOOL Read(char *buf);
};
//******************************************

现在一个工程demo,包含demo.cpp和demo.h,调用test

demo.h中include了test.h,

//****************demo.h**********************
#include "aaa.h"//和test.h里面的aaa.h不一样,不在同一个位置
#include "test.h"
Ctest *pCtest;
//******************************************


//*****************demo.cpp*********************
...
pCtest->Init();
pCtest->Quit();
pCtest->Read(buf);
...
//******************************************

demo.h本身include了一个同名的aaa.h,但是内容不一样,导致了冲突,编译不了。

但是修改一下test.h,注释#include "aaa.h",甚至注释char * m_szPath;后都能编译,而且能正常使用。

//*****************test.h修改**********************
//#include "aaa.h"
class AFX_EXT_CLASS Ctest
{
public:
...

// char * m_szPath;

BOOL Init(void);
void Quit(void);
BOOL Read(char *buf);
};
//******************************************

如果把demo.cpp调用了的函数也注释,就无法编译,会报错

//*****************test.h修改**********************
//#include "aaa.h"
class AFX_EXT_CLASS Ctest
{
public:
...

// char * m_szPath;

// BOOL Init(void);
void Quit(void);
BOOL Read(char *buf);
};
//******************************************

test.lib 和 test.dll是没有改变的,难道修改test.h不会影响test.dll的使用吗?test.h只是提供一个原型吗?头文件,导入库,动态库在编译和运行的时候都是怎样一个过程?
学艺不精,还请各位高手指点指点,不胜感激。

2 个解决方案

#1


看了半天,没懂要表达的意思

推荐本书:《程序员的自我修养——链接、装载与库》

#2


引用 1 楼 paschen 的回复:
看了半天,没懂要表达的意思

推荐本书:《程序员的自我修养——链接、装载与库》
好像不错 准备看 谢谢

#1


看了半天,没懂要表达的意思

推荐本书:《程序员的自我修养——链接、装载与库》

#2


引用 1 楼 paschen 的回复:
看了半天,没懂要表达的意思

推荐本书:《程序员的自我修养——链接、装载与库》
好像不错 准备看 谢谢