Windows wininet.InternetOpenUrlA错误\u SXS\u激活\u上下文\u已禁用
我有这个计划:Windows wininet.InternetOpenUrlA错误\u SXS\u激活\u上下文\u已禁用,windows,compilation,Windows,Compilation,我有这个计划: #include <string> #include <iostream> #include <fstream> #include <windows.h> #include <wininet.h> #include <winsock.h> #include <stdio.h> #include <stdarg.h> using namespace std; int main()
#include <string>
#include <iostream>
#include <fstream>
#include <windows.h>
#include <wininet.h>
#include <winsock.h>
#include <stdio.h>
#include <stdarg.h>
using namespace std;
int main()
{
HINTERNET hOpen, hURL;
LPCTSTR NameProgram = "UA"; // LPCWSTR == Long Pointer to Const Wide String
LPCTSTR Website;
char file[101];
unsigned long read;
//Always need to establish the internet connection with this funcion.
if ( !(hOpen = InternetOpen(NameProgram, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 )))
{
cerr << "Error in opening internet" << endl;
return 0;
}
Website = "www.c-jump.com";
hURL = InternetOpenUrl( hOpen, Website, NULL, 0, 0, 0 ); //Need to open the URL
InternetReadFile(hURL, file, 100, &read);
while (read == 100)
{
InternetReadFile(hURL, file, 100, &read);
file[read] = '\0';
cout << file;
}
cout << endl;
InternetCloseHandle(hURL);
return 0;
}
我运行exe并没有得到任何输出,我希望URL的HTML响应打印到标准输出。我在调试器中运行代码,在InternetOpenUrlA函数返回时返回以下错误:
ERROR_SXS_ACTIVATION_CONTEXT_DISABLED (00002EE6)
我在Windows10上运行Windows
有人能解释一下这意味着什么以及如何解决这个问题吗?昨天早些时候,我有同样的代码在工作,但突然它停止了工作,中间安装了一些Windows更新
非常感谢
Charlie由于您的URL没有方案/协议,错误可能是错误的INTERNET方案无法识别。只需修复URL:
网站=”http://www.c-jump.com";代码>你的读取循环也有问题,你扔掉了前100个字节!也不能保证它每次可以读取100字节
您还可以尝试修复URL:
DWORD DumpResponse(const char *URL)
{
LPCSTR agent = "Stackoverflow Example";
DWORD error, read;
HINTERNET hInet, hConn;
char data[101], urlbuf[INTERNET_MAX_URL_LENGTH];
const char *defscheme = "http";
URL_COMPONENTSA uc;
ZeroMemory(&uc, sizeof(uc));
uc.dwStructSize = sizeof(uc);
BOOL crack = InternetCrackUrlA(URL, 0, 0, &uc);
error = GetLastError();
printf("DBG: InternetCrackUrlA error %d\n", crack ? 0 : error);
if (!crack && error == ERROR_INTERNET_UNRECOGNIZED_SCHEME && strlen(defscheme) + 3 + strlen(URL) < INTERNET_MAX_URL_LENGTH)
{
// Prepend a protocol
sprintf(urlbuf, "%s://%s", defscheme, URL);
URL = urlbuf;
}
else if (!crack)
{
return error;
}
hInet = InternetOpenA(agent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (!hInet) return GetLastError();
hConn = InternetOpenUrlA(hInet, URL, NULL, 0, 0, 0);
error = GetLastError();
if (!hConn)
{
InternetCloseHandle(hInet);
printf("DBG: InternetOpenUrl failed with error %d\n", error);
return error;
}
error = 0;
for (;;)
{
if (!InternetReadFile(hConn, data, sizeof(data) - 1, &read))
{
error = GetLastError();
break;
}
if (0 == read) break; // Done
data[read] = '\0';
printf("%s", data);
}
InternetCloseHandle(hInet);
InternetCloseHandle(hConn);
return error;
}
int main()
{
printf("----\nDumpResponse returned %d\n", DumpResponse("www.c-jump.com"));
}
DWORD DumpResponse(const char*URL)
{
LPCSTR agent=“Stackoverflow示例”;
DWORD错误,读取;
HINTERNET hInet,hConn;
字符数据[101],urlbuf[互联网最大URL长度];
const char*defscheme=“http”;
URL_组件a uc;
零内存(&uc,sizeof(uc));
uc.dwStructSize=sizeof(uc);
BOOL crack=InternetCrackUrlA(URL、0、0和uc);
error=GetLastError();
printf(“DBG:InternetCrackUrlA错误%d\n”,crack?0:错误);
如果(!crack&&error==error\u INTERNET\u UNRECOGNIZED\u SCHEME&&strlen(defscheme)+3+strlen(URL)
DWORD DumpResponse(const char *URL)
{
LPCSTR agent = "Stackoverflow Example";
DWORD error, read;
HINTERNET hInet, hConn;
char data[101], urlbuf[INTERNET_MAX_URL_LENGTH];
const char *defscheme = "http";
URL_COMPONENTSA uc;
ZeroMemory(&uc, sizeof(uc));
uc.dwStructSize = sizeof(uc);
BOOL crack = InternetCrackUrlA(URL, 0, 0, &uc);
error = GetLastError();
printf("DBG: InternetCrackUrlA error %d\n", crack ? 0 : error);
if (!crack && error == ERROR_INTERNET_UNRECOGNIZED_SCHEME && strlen(defscheme) + 3 + strlen(URL) < INTERNET_MAX_URL_LENGTH)
{
// Prepend a protocol
sprintf(urlbuf, "%s://%s", defscheme, URL);
URL = urlbuf;
}
else if (!crack)
{
return error;
}
hInet = InternetOpenA(agent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (!hInet) return GetLastError();
hConn = InternetOpenUrlA(hInet, URL, NULL, 0, 0, 0);
error = GetLastError();
if (!hConn)
{
InternetCloseHandle(hInet);
printf("DBG: InternetOpenUrl failed with error %d\n", error);
return error;
}
error = 0;
for (;;)
{
if (!InternetReadFile(hConn, data, sizeof(data) - 1, &read))
{
error = GetLastError();
break;
}
if (0 == read) break; // Done
data[read] = '\0';
printf("%s", data);
}
InternetCloseHandle(hInet);
InternetCloseHandle(hConn);
return error;
}
int main()
{
printf("----\nDumpResponse returned %d\n", DumpResponse("www.c-jump.com"));
}