【问题标题】:Using Waitable Timers with an Asynchronous Procedure Call使用带有异步过程调用的等待计时器
【发布时间】:2020-11-08 10:19:48
【问题描述】:

我使用了来自 Using Waitable Timers with an Asynchronous Procedure Call 的 MSDN 示例来检查 APC 是如何工作的。但是,当我尝试编译此源代码时,它没有编译,它给了我以下错误:

C4700:使用了未初始化的局部变量“MyData”

这段代码有什么问题?

【问题讨论】:

  • (查看链接,但下次请将代码作为文本粘贴到您的问题中)。 这段代码有什么问题 据我所知,没什么。你用的是什么版本的编译器?
  • 错误的是,在CloseHandle( hTimer )之后需要调用SleepEx(0, TRUE);NtTestAlert();,以确保定时器线程队列中没有更多的APC。但如果不是自己出错,你一定不会在这里得到 error C4700
  • 示例中没有 uninitialized MyData 变量,因此错误显然是由于您添加了我们看不到的内容。请edit您的问题显示您的实际代码,而不是外部网站上的一些示例代码。

标签: c++ winapi


【解决方案1】:

如果直接在C++中使用链接中的示例,下面的代码会报错(因为C++严格匹配字符串的类型)。

MyData.szText = TEXT("This is my data");

C2440 '=':无法从 'const wchar_t [16]' 转换为 'TCHAR *'

所以也许你像这样使用lstrcpy(或strcpy)函数:

lstrcpy(MyData.szText, TEXT("This is my data"));

这将触发 C4700 错误:

C4700:使用了未初始化的局部变量“MyData”

您可以尝试使用 cast,它对我有用:

MyData.szText = (TCHAR *)TEXT("This is my data");

【讨论】:

  • 除非您首先将szText 指定为指向lstrcpy() 复制到的有效缓冲区,否则您使用lstrcpy() 的建议将不起作用,例如:TCHAR buffer[256]; MyData.szText = buffer; lstrcpy(MyData.szText, ...);
  • @RemyLebeau 我的意思是使用lstrcpy() 函数会导致C4700错误。我的演示问题,对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2019-09-17
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多