关于include另一个文件

lotuson 2008-11-07 10:43:24
最近工作需要,使用BCB做C++

有个如下问题想请教大家,谢谢!

a.cpp 使用了动态库DDDD_32.DLL(头文件DDDD_32.H)
//----
#include "DDDD_32.H"

b.cpp 也使用了动态库DDDD_32.DLL(头文件DDDD_32.H)
//----
#include "DDDD_32.H"


同时呢,a.cpp通过include "b.h"调用b.cpp中实现的函数
//----
#include "b.h"


结果报出一大堆错误
[C++ Error] DDDD_32.H(4): E2141 Declaration syntax error
[C++ Error] DDDD_32.H(5): E2238 Multiple declaration for 'HANDLE'
[C++ Error] DDDD_32.H(4): E2344 Earlier declaration of 'HANDLE'
[C++ Error] DDDD_32.H(5): E2141 Declaration syntax error
[C++ Error] DDDD_32.H(6): E2238 Multiple declaration for 'HANDLE'
[C++ Error] DDDD_32.H(5): E2344 Earlier declaration of 'HANDLE'
[C++ Error] DDDD_32.H(6): E2141 Declaration syntax error
[C++ Error] DDDD_32.H(7): E2293 ) expected
[C++ Error] DDDD_32.H(8): E2293 ) expected
[C++ Error] DDDD_32.H(9): E2293 ) expected
[C++ Error] DDDD_32.H(10): E2293 ) expected
[C++ Error] DDDD_32.H(11): E2293 ) expected
[C++ Error] DDDD_32.H(12): E2293 ) expected
[C++ Error] DDDD_32.H(13): E2293 ) expected
[C++ Error] DDDD_32.H(14): E2293 ) expected
[C++ Error] DDDD_32.H(15): E2293 ) expected
[C++ Error] DDDD_32.H(16): E2293 ) expected
[C++ Error] DDDD_32.H(17): E2293 ) expected
[C++ Error] DDDD_32.H(18): E2293 ) expected
[C++ Error] DDDD_32.H(19): E2293 ) expected
[C++ Error] DDDD_32.H(20): E2293 ) expected
[C++ Error] DDDD_32.H(21): E2293 ) expected
[C++ Error] DDDD_32.H(22): E2293 ) expected
[C++ Error] DDDD_32.H(23): E2293 ) expected
[C++ Error] DDDD_32.H(24): E2293 ) expected
[C++ Error] DDDD_32.H(24): E2228 Too many error or warning messages

请问这个问题应该如何解决呢?
...全文
96 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lotuson 2008-11-09
  • 打赏
  • 举报
回复
结贴了,自己慢慢看书研究
lotuson 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wewaa 的回复:]
a既然已经#include "b.h" b.h已经#include "DDDD_32.H",所以你的a.h是不用再#include "DDDD_32.H",注释掉即可。
[/Quote]


先前已经试过了,没有作用的,谢谢你
lotuson 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jxw1987628 的回复:]
C/C++ code
#ifndef DDDD_32H
#define DDDD_32H

extern "C"
{
void * __declspec(dllimport) __stdcall init( ) ;

}
#endif




将你的DDDD_32.h这个文件改造成这个样子试试看, 不要用HANDLE这个类型定义了。
建议导出函数都写成标准类型,不要搞HANDLE这样的东东。其他有HANDLE的也改成
void *吧,如果有很多的话,来个字符串替换。
[/Quote]


这样我就不会弄了,不过谢谢你了
jxw1987628 2008-11-08
  • 打赏
  • 举报
回复

#ifndef DDDD_32H
#define DDDD_32H

extern "C"
{
void * __declspec(dllimport) __stdcall init( ) ;

}
#endif


将你的DDDD_32.h这个文件改造成这个样子试试看, 不要用HANDLE这个类型定义了。
建议导出函数都写成标准类型,不要搞HANDLE这样的东东。其他有HANDLE的也改成
void *吧,如果有很多的话,来个字符串替换。
lotuson 2008-11-08
  • 打赏
  • 举报
回复
试过以上方法都不行,不过还是很感谢大家的帮助
现把有关文件描述如下,以其解决问题

DDDD_32.H(其实现封装在DDDD_32.dll中)

extern "C"
{

//********************** commual subroutine ***********************
HANDLE __stdcall init();//初始化---------关键就在这个HANDLE

...
...
...

}
//查看HANDLE,其在winnt.h中定义
//.....
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif

//.....................


a.cpp include DDDD_32.H

b.cpp include DDDD_32.H

a.cpp include b.H
laowang2 2008-11-08
  • 打赏
  • 举报
回复
a既然已经#include "b.h" b.h已经#include "DDDD_32.H",所以你的a.h是不用再#include "DDDD_32.H",注释掉即可。
lotuson 2008-11-07
  • 打赏
  • 举报
回复
怎么加都没用。。。。。哎


谢谢楼上各位兄弟
jxw1987628 2008-11-07
  • 打赏
  • 举报
回复
在b.h这个头文件中这样写

#ifndef bH
#define bH


//中间是你的头文件里面的代码

#endif
lotuson 2008-11-07
  • 打赏
  • 举报
回复
#ifndef HANDLE
#include "DDDD_32.h"
#endif


------这样写可以吗?好象不行。。。
lotuson 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yuanreid 的回复:]
检查头文件中是否有#ifndef #define #endif来避免头文件的重复包含,如果没有添加上即可解决。
[/Quote]

具体怎么写,不好意思,请帮下,谢谢
yuanreid 2008-11-07
  • 打赏
  • 举报
回复
检查头文件中是否有#ifndef #define #endif来避免头文件的重复包含,如果没有添加上即可解决。
TripH0101 2008-11-07
  • 打赏
  • 举报
回复
头文件重复包含
wwp3321 2008-11-07
  • 打赏
  • 举报
回复
打开bcb,会自动建立个Form,看看Form的头文件的头尾就明白了。
头文件中首尾有
#ifndef

#define










#endif
yuanreid 2008-11-07
  • 打赏
  • 举报
回复
如果你的头文件中定义了HANDLE,肯定会跟某些系统头文件冲突,他是否使用了namespace,试试通过命名空间来解决。
勉励前行 2008-11-07
  • 打赏
  • 举报
回复
//方法一:將"DDDD_32.H" 放在所有的頭文件的前面。

a.cpp
#include "DDDD_32.H"
....//其他頭文件

b.cpp 也使用了动态库DDDD_32.DLL(头文件DDDD_32.H)
#include "DDDD_32.H"
....//其他頭文件

同时呢,a.cpp通过include "b.h"调用b.cpp中实现的函数
#include "DDDD_32.H"
#include "b.h"
....//其他頭文件

//方法2:試試將 #define NO_WIN32_LEAN_AND_MEAN 放在DDDD_32.H頭文件的前面。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧