#include 出错

小温 2003-07-02 02:58:42
我在C++Builder6里调用别人用VC++写的DLL,他里面的一个函数的参数用到了COleDateTime类,我在C++Builder6里用COleDateTime类时出错,说类COleDateTime没有定义。
然后我在include/Mfc里找到了一个头文件afxdisp.h,那里面定义了COleDateTime类,然后我在我的文件里加了一条语句#include <afxdisp.h>,但是编译的时候又出现了别的错误:[C++ Fatal Error]afxv_w32.h(14):F1003 Error directive:#error WINDOWS.H already included. MFC apps must not #include <windows.h>,不知道这是什么错误,希望大家能帮帮我,谢谢!
如果有什么方法能直接应用类COleDateTime就更好了!
...全文
528 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
土著巫师 2003-07-04
  • 打赏
  • 举报
回复
一、MFC DLL 类型有下面三种情况:

1、使用共享 MFC DLL 的规则 DLL :
选择此选项将 MFC 库作为共享 DLL 链接到您的程序。使用此选项不能在 DLL 和调用应用程序之间共享 MFC 对象。程序在运行时调用 MFC 库。如果程序由多个使用 MFC 库的执行文件组成,则此选项可降低程序的磁盘和内存需求。Win32 和 MFC 程序都可调用 DLL 中的函数。必须将 MFC DLL 与此项目类型一起重新发布。
2、带静态链接 MFC 的规则 DLL :
选择此选项在生成时将您的程序静态链接到 MFC 库。Win32 和 MFC 程序都可调用 DLL 中的函数。虽然此选项会增加程序的大小,但不必将 MFC DLL 与此项目类型一起重新分布。不能在 DLL 和调用应用程序之间共享 MFC 对象。
3、MFC 扩展 DLL
如果希望程序在运行时调用 MFC 库和希望在 DLL 和调用应用程序之间共享 MFC 对象,则选择此选项。如果程序由多个使用 MFC 库的执行文件组成,则此选项可降低程序的磁盘和内存需求。只有 MFC 程序可以在 DLL 中调用函数。必须将 MFC DLL 与此项目类型一起重新发布。
二、你手里的DLL不能叫DLL,只能叫“只有VC可以使用的非真正意义上DLL”,你别无他法,
BC,POWERBUILDER,VB,DELPHI都用不了。
三,在VC里不能建立基于MFC的DLL,只能建立WIN32 DLL,在VC里项目建立向导是不一样的,如果一定要用,也只能导出常规的函数、类、变量,千万不要导出MFC类或需要MFC对象的函数什么的。

祝你好运。
Siney 2003-07-03
  • 打赏
  • 举报
回复
MFC的类不能加入windows.h,而vcl.h中却包含了windows.h,所以你只能2选一

----------------------------------
感谢您选用Borland产品,更多信息请前往Borland社区和新闻组查询:.......
小温 2003-07-03
  • 打赏
  • 举报
回复
放在最前面了也不行,在afxdisp.h里包含的其他头文件出了一大堆错误。
从afxdisp.h里把声明找出来,拷贝到另外一个单独的头文件里,这个头文件不能用,因为COleDateTime这个定义里包含其它的类型,也就是说要用到别的头文件,应用别的头文件的时候又出乱七八糟的错误。
binbin 2003-07-03
  • 打赏
  • 举报
回复
除了COleDateTimeSpan外没有什么别的类了,一起拿过来就是了.
小温 2003-07-03
  • 打赏
  • 举报
回复
谁能救救我????
binbin 2003-07-03
  • 打赏
  • 举报
回复
1.把#include <afxdisp.h>放在最前面试试.
2.从afxdisp.h中把这个声明找出来,单独做一个文件.尽量把MFC的数据类型改为基本数据类型或windows数据类型.
小温 2003-07-02
  • 打赏
  • 举报
回复
让谁加上extern "C"呀?
Robin 2003-07-02
  • 打赏
  • 举报
回复
让他们加上 extern "c",重新编译!
就可以了!
小温 2003-07-02
  • 打赏
  • 举报
回复
提示是不能加windows.h头文件
我加了,同样的错误。
solares1 2003-07-02
  • 打赏
  • 举报
回复
MFC apps must not #include <windows.h>
看到这个提示了吧,加个头文件#include <windows.h>
预编译头文件今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有,就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。结果不能编译了,我靠:fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\':No such file or directory怎么rebuild all都不行。上网查了一下,才搞懂了:----------------总结------如果工程很大,头文件很多,而有几个头文件又是经常要用的,那么1。把这些头文件全部写到一个头文件里面去,比如写到preh.h2。写一个preh.c,里面只一句话:#include "preh.h"3。对于preh.c,在project setting里面设置creat precompiled headers,对于其他.c文件,设置use precompiled header file//哈哈我试了一下,效果很明显,不用precompiled header,编译一次我可以去上个厕所,用precompiled header,编译的时候,我可以站起来伸个懒腰,活动活动就差不多啦---------转载的文章----------预编译头的概念:所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时你得注意预编译头文件通常很大,通常有6-7M大。注意及时清理那些没有用的预编译头文件。也许你会问:现在的编译器都有Time stamp的功能,编译器在编译整个工程的时候,它只会编译那些经过修改的文件,而不会去编译那些从上次编译过,到现在没有被修改过的文件。那么为什么还要预编译头文件呢?答案在这里,我们知道编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。预编译头的作用:根据上文介绍,预编译头文件的作用当然就是提高便宜速度了,有了它你没有必要每次都编译那些不需要经常改变的代码。编译性能当然就提高了。预编译头的使用:要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件)想必大家都知道 StdAfx.h这个文件。很多人都认为这是VC提供的一个“系统级别”的,编译器带的一个头文件。其实不是的,这个文件可以是任何名字的。我们来考察一个典型的由AppWizard生成的MFC Dialog Based 程序的预编译头文件。(因为AppWizard会为我们指定好如何使用预编译头文件,默认的是StdAfx.h,这是VC起的名字)。我们会发现这个头文件里包含了以下的头文件:#include // MFC core and standard components#include // MFC extensions#include // MFC Automation classes#include // MFC support for Internet Explorer 4Common Controls#include

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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