1

我正在使用 gSoap 生成 ANSI C 源代码,我想在 Windows 7、64 位操作系统上的 LabWindows/CVI 环境中构建它。gSoap 文件 stdsoap2.c 包含 _setmode() 函数的多个实例,原型如下:

int _setmode (int fd, int mode);

其中 fd 是文件描述符,mode 设置为 _O_TEXT 或 _O_BINARY。

奇怪的是,尽管 LW/CVI 包含 Microsoft 的 SDK 的接口,但该 SDK 在其包含的任何头文件中都不包含 _setmode 的原型,即使 SDK 的帮助链接包含有关该函数的信息。

有谁知道 LabWindows/CVI 中用于将文件(或流)翻译模式设置为文本或二进制的方法。

谢谢,瑞克

4

2 回答 2

1

结束这个问题的循环。
由于我上面的评论中列出的原因,我无法使用唯一提供的答案。
虽然我确实使用了 SDK,但不是选择不同版本的 OpenFile 函数,而是支持使用自动代码生成器使用的函数_setmode(),但我的主要开发不支持环境(LabWindows/CVI)。

因此,总而言之,我的解决方案是包含 SDK 来为我提供 _setmode 的定义,并在我的非自动生成的代码中包含以下内容:

#define _O_TEXT         0x4000  /* file mode is text (translated) */     
#define _O_BINARY       0x8000  /* file mode is binary (untranslated) */

因此,需要注意的是,这篇文章描述了我实际所做的事情,我将把@gary 提供的答案标记为答案,就像在球场上一样。谢谢@加里。

于 2013-08-21T19:33:16.230 回答
0

听起来您只想以 ASCII 或二进制格式打开文件。因此,您应该能够使用此处描述_setmode()的 LW/CVI函数替换 的实例。这是一个以二进制形式读取文件的简短示例。OpenFile()

char filename = "path//to//file.ext"
int result;
result = OpenFile(filename, VAL_READ_ONLY, VAL_OPEN_AS_IS, VAL_BINARY); 

if (result < 0)
    // Error, notify user.
else
    // No error.

另请注意页面中的此警告:

注意 Windows SDK 还包含一个 OpenFile 函数。如果包含 windows.h 而不包含 formatio.h,则在调用 OpenFile 时会出现编译错误。

于 2012-01-14T16:45:04.580 回答