在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) |