【发布时间】:2014-03-31 07:27:56
【问题描述】:
这里是代码。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
auto f = CreateFile(L"file.txt", GENERIC_READ, FILE_SHARE_READ, nullptr,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nullptr);
struct overlapped_buffer
{
OVERLAPPED o;
char b[64];
};
overlapped_buffer ob = {};
ReadFileEx(f, ob.b, sizeof(ob.b), &ob.o, [] (DWORD e, DWORD c, OVERLAPPED * o)
{
if( ERROR_SUCCESS == e ) printf("Error");
else {
auto ob = reinterpret_cast<overlapped_buffer *>(o);
printf("> %.*s\n", c, ob->b);
}
} );
SleepEx( 1000, TRUE );
CloseHandle( f );
printf("read file");
return 0;
}
问题是我不知道如何解决智能感知错误。
2 IntelliSense: no suitable conversion function from "lambda []void (DWORD e, DWORD c, OVERLAPPED *o)->void" to "LPOVERLAPPED_COMPLETION_ROUTINE" exists c:\kombea\portaudiofastplayer\test_lambda\test_lambda.cpp 19 43 test_lambda
在这种情况下,我能否创建一个 lambda 函数并将其用作 CALLBACK 函数?
【问题讨论】:
-
您使用的是什么版本的 Visual Studio?您的代码将在 VS2010 中 not work。
-
代码真的可以编译吗? Intellisense 经常标记这样构建良好的东西。
-
否,代码无法编译。编译器崩溃。 “错误 1:错误 C1001:编译器发生内部错误。”
-
我正在使用 VS2010... 谢谢。不过,这是一个很大的失望。