gpt4 book ai didi

c - 为什么第二次调用 RasGetEntryProperties() 返回正在进行的重叠 I/O 操作?

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:45 27 4
gpt4 key购买 nike

有这样的代码:

#include <ras.h>
#include <raserror.h>
#include <stdio.h>
#include <windows.h>

int main(int argc, char** argv) {
DWORD dwEntryInfoSize = 0;
DWORD dwDeviceInfoSize = 0;
DWORD dwRet = 0;
LPRASENTRY lpRasEntry = NULL;
LPBYTE lpDeviceInfo = NULL;

创建 RAS 连接。获取默认电话簿条目的缓冲区大小信息。

    if ((dwRet = RasGetEntryProperties(NULL, "", NULL, &dwEntryInfoSize, NULL, &dwDeviceInfoSize)) != ERROR_SUCCESS) {
if (dwRet != ERROR_BUFFER_TOO_SMALL) {
printf("RasGetEntryProperties error: %s\n", GetLastError());

return EXIT_FAILURE;
}
}

if (dwEntryInfoSize == 0) {
printf("Entry info size error: %s\n", GetLastError());

return EXIT_FAILURE;
}


lpRasEntry = (LPRASENTRY) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwEntryInfoSize);

if (lpRasEntry == NULL) {
printf("HeapAlloc RasEntry error: %s\n", GetLastError());

return EXIT_FAILURE;
}

if (dwDeviceInfoSize) {
lpDeviceInfo = (LPBYTE)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwDeviceInfoSize);
}

lpRasEntry->dwSize = sizeof(RASENTRY);

这里有一个错误:Overlapped I/O operation is in progress。该错误发生在 Windows XP 中,在 Windows 10 中一切正常。我需要此代码才能在 XP 中工作。

    if ((dwRet = RasGetEntryProperties(NULL, "", lpRasEntry, &dwEntryInfoSize, lpDeviceInfo, &dwDeviceInfoSize)) != ERROR_SUCCESS) {
printf("RasGetEntryProperties error: %s\n", GetLastError());

return EXIT_FAILURE;
}

// Validate new phonebook name "TestEntry"
if ((dwRet = RasValidateEntryName(NULL, "TestEntry")) != ERROR_SUCCESS) {
printf("RasValidateEntryName error: %s\n", GetLastError());

return EXIT_FAILURE;
}

// Install a new phonebook entry, "TestEntry", using default properties
if ((dwRet = RasSetEntryProperties(NULL, "TestEntry", lpRasEntry, dwEntryInfoSize, lpDeviceInfo, dwDeviceInfoSize)) != ERROR_SUCCESS) {
printf("RasSetEntryProperties error: %s\n", GetLastError());

return EXIT_FAILURE;
}

// Deallocate memory for the connection buffer
HeapFree(GetProcessHeap(), 0, lpRasEntry);
lpRasEntry = NULL;

return EXIT_SUCCESS;
}

此代码创建一个拨号连接。我被这个错误困住了。

enter image description here

最佳答案

代码显示错误...

错误 #1:Ras* 函数没有为 GetLastError() 设置错误代码。那些 GetLastError() 没有意义。它们以 DWORD 形式返回错误代码。阅读 MSDN 中的路由和远程访问错误代码。

错误 #2:在 RasGetEntryProperties() 函数 5 和 6 中以 NT 开头,参数未使用且应为 NULL。

错误#3:最阴险的。事实上,某些 Windows 操作系统的 RASENTRY 结构的大小是不同的。例如,在 XP 和 10 之间。因此,在头文件的某处,我们应该指定如下内容:

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501

可以在 MSDN 中阅读更多详细信息。修改 WINVER 和 _WIN32_WINNT。在本例中,我们指定了 Windows XP 的版本。这就是我所需要的。而Overlapped I/O operation is in progress与我们在这种情况下无关。我们只是输出 GetLastError() 的结果,这可能是在执行前面的函数时在 Windows 深处的某个地方出现的。

关于c - 为什么第二次调用 RasGetEntryProperties() 返回正在进行的重叠 I/O 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47132256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com