有这样的代码:
#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);
这里有一个错误:重叠的I / O操作正在进行中。在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;
}
此代码创建拨号连接。我坚持这个错误。
答案 0 :(得分:0)
代码显示错误......
错误#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的版本。这就是我所需要的。在这种情况下,重叠的I / O操作正在进行中与我们无关。我们只输出GetLastError()的结果,当执行前面的函数时,它可能出现在Windows的深处。