草庐IT

c++ - C 和 C++ 中 WINAPI 的区别

coder 2024-06-16 原文

我正在从驱动程序读取数据。该驱动程序附带了有关如何基于该驱动程序开发应用程序的示例。这些例子是几年前写的。他们使用 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/

有关c++ - C 和 C++ 中 WINAPI 的区别的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  3. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  4. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  7. ruby - 这两段代码有什么区别? - 2

    打印1:defsum(i)i=i+[2]end$x=[1]sum($x)print$x打印12:defsum(i)i.push(2)end$x=[1]sum($x)print$x后者是修改全局变量$x。为什么它在第二个例子中被修改而不是在第一个例子中?类Array的任何方法(不仅是push)都会发生这种情况吗? 最佳答案 变量范围在这里无关紧要。在第一段代码中,您仅使用赋值运算符=为变量i赋值,而在第二段代码中,您正在修改$x(也称为i)使用破坏性方法push。赋值从不修改任何对象。它只是提供一个名称来引用一个对象。方法要么是破坏性

  8. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  9. ruby - Ruby 中 .next 和 .succ 的区别 - 2

    Ruby中的Fixnum方法.next和.succ有什么区别?看起来它的工作原理是一样的:1.next=>21.succ=>2如果有什么不同,为什么有两种方法做同样的事情? 最佳答案 它们是等价的。Fixnum#succ只是Fixnum#next的同义词。他们甚至在thereferencemanual中共享同一block. 关于ruby-Ruby中.next和.succ的区别,我们在StackOverflow上找到一个类似的问题: https://stacko

  10. ruby - 在参数为 `yield self` 的方法中使用 `&block` 和在没有参数 `yield self` 的方法中使用 `&block` 有什么区别吗? - 2

    我明白了defa(&block)block.call(self)end和defa()yieldselfend导致相同的结果,如果我假设有这样一个blocka{}。我的问题是-因为我偶然发现了一些这样的代码,它是否有任何区别或者是否有任何优势(如果我不使用变量/引用block):defa(&block)yieldselfend这是一个我不理解&block用法的具体案例:defrule(code,name,&block)@rules=[]if@rules.nil?@rules 最佳答案 我能想到的唯一优点就是自省(introspecti

随机推荐