C和C++中WINAPI的区别

Difference Between WINAPI in C and C++

本文关键字:区别 WINAPI C++      更新时间:2023-10-16

我正在从驱动程序读取数据。驱动程序附带了如何基于驱动程序开发应用程序的示例。这些例子是几年前写的。他们使用WINAPI和C。现在我将使用他们的一些头文件。它们定义了数据结构和各种其他内容。

我尝试在C++中创建一个WINAPI,并尝试链接到这些文件。但正如这里所解释的,在最后一个答案中,我非常相信我的代码也有同样的问题。

现在,我不能按照建议去做。我的程序很长,不能弄乱头文件。它们很复杂。

我的选择是完全用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。您需要在函数开始时声明所有变量,或者切换到支持C99的编译器。