Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341567
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:06:22

在c++builder下有没有直接对地址操作的函数,好像是在98以后的系统中不允许对地址进行直接操作把,现在我有块基于ISA总线的通讯卡,想在c++builder下对其进行编程。能够直接进行吗》还是需要做一些驱动、函数什么的》?
我以前用一些大公司的数据采集卡,他们都提供了一些库文件,还有一些封装好了的在windows下操作的函数。例如下面研翔提供的对采集卡进行操作的.h文件:我还想问一下头三句话的具体含义是什么,还有后面的int PASCAL W_812PG_Initial( int card_number , int base_address );函数为什么一定要int PASCAL 来声明?这里面的具体原理是什么呢?谢谢victor了!!!

#ifdef __cplusplus
extern "C" {
#endif
/******** Error code definition for PCL cards ********/
enum {
    ERR_NoError,                        // 0
    ERR_BoardNoInit,                    // 1
    ERR_InvalidBoardNumber,             // 2
};

/******** possible value of card_number ********/
#define CARD_1     0
/******** for DI and DO ********/
#define DI_LO_BYTE    0    //for port_no of DI (low  byte)
#define DI_HI_BYTE    1    //for port_no of DI (high byte)

/*****************************************************************************/
/*                         Function Declarations                             */
int PASCAL W_812PG_Initial( int card_number , int base_address );
int PASCAL W_812PG_Switch_Card_No( int card_number );

#ifdef __cplusplus
}
#endif

--------------------next---------------------
① 直接访问端口的程序可以参考这两个:





② 在 C++ 里写 C 语言程序
__cplusplus : 如果你的编译器是 C++, 会有这个定义, 如果是 C 语言,没有这个定义。
extern "C" { /* C 语言程序 */ } //在 C++ 里面写一段 C 语言格式的程序,要用 extern "C" 的 {  和  } 扩起来。



#ifdef __cplusplus //如果用 C++ 编译器编译这个程序
extern "C" {       //以下的程序为 C 语言格式的
#endif             //对应于前面的 #ifdef __cplusplus

/* 现在可以写 C 语言格式的程序了 */

#ifdef __cplusplus //如果用 C++ 编译器编译这个程序
}                  // C 语言格式的程序写完了, 对应于前面的 extern "C" {
#endif             //对应于前面的 #ifdef __cplusplus



③ API 函数的格式
Windows 的 API 函数都是 “PASCAL” 格式的, 并且是 C 语言程序, 不是 C++ 格式的程序
从我看到 Windows 3.0 开始,所有的 API 函数都必须用 PASCAL 格式的,我一直没搞明白为什么 M$ 要采取这个格式
后来到了 Windows 98 以后,M$ 可能认为 PASCAL 这个单词比较难看(像Delphi?),又定义了一个和 PASCAL 一样的 WINAPI
用 PASCAL 和 WINAPI 的效果是完全一样的,现在用 PASCAL 逐渐少了,改用了 WINAPI,他们是完全相同的。
因为 PASCAL 是标准 C 的关键字,M$ 没权力取消,所以现在还可以用。WINAPI 是 M$ 用 #define 定义的。

--------------------next---------------------

阅读(1256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~