오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

S 앤드류

아래 코드가 있습니다 WinHTTPRequest.

DWORD WinHTTPRequest(LPCTSTR pServerName, LPCTSTR pRequest, WCHAR* sCommand, LPVOID pPostData, int nPostDataLength, LPCWSTR pwszHeaders, char **dataOut, int *nRead, WCHAR **dataHeaderOut, BOOL bTestProxy, BOOL bSecure, WCHAR* wsRedirect, DWORD *dwReturnStatus)
{
    HINTERNET hCurrentOpen = NULL;
    if (bTestProxy)
    {
        WCHAR sProxy[255] = L"";
        GetProxy(sProxy);
        if (lstrcmp(sProxy, L"") == 0)
            hCurrentOpen = hOpen;
        else if (lstrcmp(sProxy, g_wsCurrentProxy) != 0)
        {
            if (hOpenProxy)
                WinHttpCloseHandle(hOpenProxy);
            hOpenProxy = WinHttpOpen(L"Test", WINHTTP_ACCESS_TYPE_NAMED_PROXY, sProxy, NULL, 0/*INTERNET_FLAG_ASYNC*/);
            lstrcpy(g_wsCurrentProxy, sProxy);
            hCurrentOpen = hOpenProxy;
        }
        else
            hCurrentOpen = hOpenProxy;
    }
    else
        hCurrentOpen = hOpen;

    HINTERNET hConnect = NULL;
    if (bSecure)
        hConnect = WinHttpConnect(hCurrentOpen, pServerName, INTERNET_DEFAULT_HTTPS_PORT, 0);
    else
        hConnect = WinHttpConnect(hCurrentOpen, pServerName, INTERNET_DEFAULT_HTTP_PORT, 0);

    if (!hConnect)
    {
        DWORD dwError = GetLastError();
        return dwError;
    }

    DWORD dwFlags;
    if (bSecure)
        dwFlags = WINHTTP_FLAG_SECURE | WINHTTP_FLAG_REFRESH;
    else
        dwFlags = WINHTTP_FLAG_REFRESH;

    HINTERNET hRequest = WinHttpOpenRequest(hConnect, sCommand, pRequest, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, dwFlags);
    if (!hRequest)
    {
        DWORD dwError = GetLastError();
        WinHttpCloseHandle(hConnect);
        return dwError;
    }

    WinHttpAddRequestHeaders(hRequest, pwszHeaders, -1, WINHTTP_ADDREQ_FLAG_ADD);
    int nLengthPostData;
    if (nPostDataLength == NULL)
    {
        if (pPostData)
            nLengthPostData = strlen((char*)pPostData);
        else
            nLengthPostData = 0;
    }
    else
        nLengthPostData = nPostDataLength;

    BOOL bSuccess;
    if (wsRedirect != NULL)
    {
        DWORD dwOption;
        DWORD dwOptionSize;
        dwOption = WINHTTP_OPTION_REDIRECT_POLICY_NEVER;
        dwOptionSize = sizeof(DWORD);
        bSuccess = WinHttpSetOption(hRequest, WINHTTP_OPTION_REDIRECT_POLICY, (LPVOID)&dwOption, dwOptionSize);
        DWORD dwOptionValue = WINHTTP_DISABLE_REDIRECTS;
        bSuccess = WinHttpSetOption(hRequest, WINHTTP_OPTION_DISABLE_FEATURE, &dwOptionValue, sizeof(dwOptionValue));
    }
    BOOL b = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, pPostData, pPostData == NULL ? 0 : nLengthPostData, nLengthPostData, 0);
    if (!b)
    {
        DWORD dwError = GetLastError();
        WinHttpCloseHandle(hConnect);
        WinHttpCloseHandle(hRequest);
        return dwError;
    }
    WinHttpReceiveResponse(hRequest, NULL);
    DWORD dwStatus = 0;
    DWORD dwStatusSize = sizeof(DWORD);
    if (WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, NULL, &dwStatus, &dwStatusSize, NULL))
    {
        if (HTTP_STATUS_REDIRECT == dwStatus || HTTP_STATUS_MOVED == dwStatus)
        {
            DWORD dwSize;
            WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_LOCATION, WINHTTP_HEADER_NAME_BY_INDEX, NULL, &dwSize, WINHTTP_NO_HEADER_INDEX);
            if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
                return 500;
            LPWSTR pwsRedirectURL = new WCHAR[dwSize];
            bSuccess = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_LOCATION, WINHTTP_HEADER_NAME_BY_INDEX, pwsRedirectURL, &dwSize, WINHTTP_NO_HEADER_INDEX);
            if (!bSuccess)
                return 500;
            if (wsRedirect != NULL)
                lstrcpy(wsRedirect, pwsRedirectURL);
            if (dwReturnStatus != NULL)
                *dwReturnStatus = dwStatus;
            delete[] pwsRedirectURL;
        }
        else if (dwStatus != HTTP_STATUS_OK && dwStatus != HTTP_STATUS_BAD_REQUEST && dwStatus != HTTP_STATUS_CREATED)
        {
            DWORD dwError = GetLastError();
            WinHttpCloseHandle(hConnect);
            WinHttpCloseHandle(hRequest);
            if (dwReturnStatus != NULL)
                *dwReturnStatus = dwStatus;
            return dwError;
        }
    }
    if (dataHeaderOut != NULL)
    {
        DWORD dwSize = 0;
        WCHAR *pOutBuffer = NULL;
        if (!WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, NULL, &dwSize, WINHTTP_NO_HEADER_INDEX))
        {
            DWORD dwErr = GetLastError();
            if (dwErr != ERROR_INSUFFICIENT_BUFFER)
            {
                DWORD dwError = GetLastError();
                WinHttpCloseHandle(hConnect);
                WinHttpCloseHandle(hRequest);
                return dwError;
            }
        }
        pOutBuffer = new WCHAR[dwSize];
        if (WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, pOutBuffer, &dwSize, WINHTTP_NO_HEADER_INDEX))
        {
            pOutBuffer[dwSize] = '\0';
            *dataHeaderOut = (WCHAR*)pOutBuffer;
        }
        //delete[] pOutBuffer;
    }

    char *sReadBuffer = NULL;
    DWORD nTotalRead = 0;
    DWORD nToRead = 0;
    DWORD nBytesRead = 0;
    do {
        if (!WinHttpQueryDataAvailable(hRequest, &nToRead))
            break;
        if (nToRead == 0)
            break;
        sReadBuffer = (char*)((sReadBuffer == NULL) ? malloc(nToRead) : realloc(sReadBuffer, nTotalRead + nToRead + 1));
        if (WinHttpReadData(hRequest, sReadBuffer + nTotalRead, nToRead, &nBytesRead))
        {
            nTotalRead += nBytesRead;
        }
    } while (nToRead > 0);
    if (sReadBuffer != NULL && nTotalRead > 0)
    {
        {
            char *sBuffer = new char[nTotalRead + 1];
            memcpy(sBuffer, sReadBuffer, nTotalRead + 1);
            sBuffer[nTotalRead] = '\0';
            *dataOut = sBuffer;
        }
        free(sReadBuffer);
    }

    *nRead = nTotalRead;
    WinHttpCloseHandle(hConnect);
    WinHttpCloseHandle(hRequest);
    return ERROR_SUCCESS;
}

위의 함수를 다음과 같이 호출합니다.

dwReturn = WinHTTPRequest(wsHostName, wsURLPathPost, L"POST", sPostData, NULL, wsAdditionalHeaders, &sHTTPData, &nDataRead, &wsDataHeader, 0, 0, wsRedirect, &dwStatus);

그러나에서 L"POST"아래 오류가 발생합니다.

Error (active)  E0167   argument of type "const wchar_t *" is incompatible with parameter of type "WCHAR *" 

Error   C2664   'DWORD WinHTTPRequest(LPCTSTR,LPCTSTR,WCHAR *,LPVOID,int,LPCWSTR,char **,int *,WCHAR **,BOOL,BOOL,WCHAR *,DWORD *)': cannot convert argument 3 from 'const unsigned short [4]' to 'WCHAR *' 

나는 변화 시도 L"POST"_T("POST")있지만 didnt 한 일했다. 이 문제를 어떻게 해결할 수 있습니까? 감사

이고르 탄 데트 닉

당신은 걸릴 sCommand당신이 가리키는 버퍼를 수정할 계획이라고 제안, const가 아닌 포인터로. 하지만 수정할 수없는 문자열 리터럴을 거기에 전달합니다. 매개 변수를 const로 만들거나 수정 가능한 버퍼를 전달하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

"const wchar_t*" 유형의 인수가 "LPTSTR" 유형의 매개변수와 호환되지 않습니다.

C ++ "const wchar_t"유형의 인수 * "wchar_t"유형의 매개 변수와 호환되지 않음

Visual Studio 2017; / permissive가 활성화 된 경우 "const wchar_t *"유형의 인수는 "PWSTR"유형의 매개 변수와 호환되지 않습니다.

C ++ wifstream : 호환되지 않는 유형 char const *, wchar_t const *

문자열에서 const wchar_t* 로의 유형 변환. 유형이 일치하지 않습니다.

const wchar_t 유형을 LPTSTR로 변환하는 방법 (C ++)

"상태 오류 (활성) E0513"const wchar_t * "유형의 값을"wchar_t * "유형의 엔티티에 할당 할 수 없음"수정 방법

'const char *'를 'LPCWSTR {aka const wchar_t *}'로 변환 할 수 없습니다.

문자열 매개 변수 const char * 및 const wchar_t *

lua_tostring()의 값을 utf-8의 wstring 또는 const wchar_t* 유형의 변수에 어떻게 할당할 수 있습니까?

const wchar_t *를 WCHAR *로 변환

LOWORD (wParam)을 const wchar_t *로 변환

const char *를 const wchar_t *로 변환

const wchar_t*를 LPWSTR로 변환

MFC / C ++ 프로젝트에서 매개 변수 1을 'const wchar_t *'에서 'LPCTSTR'로 변환 할 수 없습니다.

const wchar_t * 매개 변수에서 연결하는 방법은 무엇입니까?

int 변수를 변환하고 const wchar_t *에 추가하는 방법

System :: String ^에서 const wchar_t로 문자열 변환 *

C++ Builder 10.3은 const char[18]에서 const wchar_t*에 할당할 수 없습니다.

""int (*) () "유형의 인수가 int 유형의 매개 변수와 호환되지 않습니다."오류?

인수 유형 "WCHAR *"은 "const char *"유형의 매개 변수와 호환되지 않습니다.

오류 : "HNode *"유형의 인수가 "HNode *"매개 변수 유형과 호환되지 않습니다.

Poco :: Path는 const wchar_t *로 컴파일되지만 예기치 않게 작동합니다.

오류 [Pe167] : "uint16_t *"유형의 인수가 "unsigned char *"유형의 매개 변수와 호환되지 않습니다.

"const char *" 유형의 인수가 "char" 유형의 매개변수와 호환되지 않습니다.

"void(*)(int wall) 유형의 C++ 인수가 "int" 유형의 매개변수와 호환되지 않습니다.

OpenGL C ++ void 유형의 인수가 void (*) () 유형의 매개 변수와 호환되지 않습니다.

"const char **"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다.

IntelliSense : "_TCHAR *"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다.

TOP 리스트

  1. 1

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  2. 2

    상황에 맞는 메뉴 색상

  3. 3

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  4. 4

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  5. 5

    std :: regex의 일관성없는 동작

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  8. 8

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  9. 9

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  10. 10

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  11. 11

    SQL Server-현명한 데이터 문제 받기

  12. 12

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  13. 13

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  14. 14

    내 페이지 번호의 서식을 어떻게 지정합니까?

  15. 15

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  16. 16

    Quickly 프로그램과 함께 작동하도록 Eclipse를 어떻게 설정할 수 있습니까?

  17. 17

    인코더없이 Azure 미디어 서비스 비디오 트림

  18. 18

    WSL 및 Ubuntu, 초기화 파일 이동 방법

  19. 19

    OpenCV에서. C ++ 컴파일러는 간단한 테스트 프로그램을 컴파일 할 수 없습니다. Clang ++ 사용

  20. 20

    마우스 휠 JQuery 이벤트 핸들러에 대한 방향 가져 오기

  21. 21

    ViewModel에서 UI 요소를 비동 시적으로 업데이트하는 방법

뜨겁다태그

보관