我正在从驱动程序读取数据。该驱动程序附带了有关如何基于该驱动程序开发应用程序的示例。这些例子是几年前写的。他们使用 WINAPI 和 C。现在我将使用他们的一些头文件。它们定义了数据结构和各种其他内容。
我尝试在 C++ 中创建 WINAPI 并尝试链接到这些文件。但正如解释的here, in the last answer ,我非常相信我的代码也有同样的问题。
现在,我不能按照那里的建议去做。我的程序很长,我不能弄乱头文件。它们很复杂。
我的选择是完全用 C 语言创建我的项目(我希望它能解决问题)。
首先,我将文件 .cpp t0 重命名为 .c。 (我什至不知道这两种编程语言之间的区别。到目前为止,它们的区别没有任何区别。) 主要问题
我使用 API 使用文件 IO 并使用了以下内容:
HANDLE myFile=CreateFile("filename.txt",FILE_APPEND_DATA,FILE_SHARE_WRITE,0,\
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
int BufferNo=sprintf(body,"%.5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f \
%[3].5f %[3].5f \n",a1,a2,a3,a4,a5,a6,a7,a8,a9);
WriteFile(myFile,body,lstrlen(body),0,NULL);
CloseHandle(myFile);
问题是它无法编译。说这样的错误:
error C2275: 'HANDLE' : illegal use of this type as an expression
error C2146: syntax error : missing ';' before identifier 'myFile'
error C2065: 'myFile' : undeclared identifier
warning C4047: '=' : 'int' differs in levels of indirection from 'HANDLE'
error C2143: syntax error : missing ';' before 'type'
error C2065: 'myFile' : undeclared identifier
warning C4022: 'WriteFile' : pointer mismatch for actual parameter 1
error C2065: 'myFile' : undeclared identifier
warning C4022: 'CloseHandle' : pointer mismatch for actual parameter 1
这些不是 C++ 中的错误,它们编译了,只是没有链接。我该如何解决这个问题。
请注意,我之前使用过类似的功能。这未被检测为错误。
HANDLE myFile=CreateFile("filename.txt",GENERIC_WRITE,FILE_SHARE_WRITE,0,\
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,0);
char* HeadingStr="a1(m) a2(m) a3(m) a4(m) a5(m) a6(m) a7(m)\
a8(m) a9(m)\n";
WriteFile(myFile,HeadingStr,lstrlen(HeadingStr),0,NULL);
CloseHandle(myFile);
这没有显示任何错误。它在同一个文件中并且之前在不同的函数中出现错误。这是在 WinMain 中,上面是在 WndProc 函数中。
最佳答案
Visual Studio 编译器不支持添加内联声明的 C99。您需要在函数的开头声明所有变量,或者切换到支持 C99 的编译器。
关于c++ - C 和 C++ 中 WINAPI 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370660/