C++ Microsoft REST API не работает с Imgur API с использованием BITMAP в приложении Win32

Примечание: я впервые использую RESTful API, поэтому, если я делаю что-то невероятно неправильное, просто предупредите меня.

Моя проблема в том, что у меня есть HBITMAP что я превращаю в BITMAP, который я пытаюсь преобразовать в char*, Я пытаюсь загрузить это char* Имгур как type:file, Тем не менее, он выдает одну из двух ошибок. Раньше он просто ничего не копировал в буфер обмена и продолжал, но в последнее время выдает это сообщение об ошибке:

First-chance exception at 0x00704380 (msvcr120d.dll) in SampleShot.exe: 0xC0000005: 
Access violation reading location 0x00000000.
Unhandled exception at 0x00704380 (msvcr120d.dll) in SampleShot.exe: 0xC0000005: Access violation reading location 0x00000000.

The program '[4356] SampleShot.exe' has exited with code 0 (0x0).

То, что я знаю, работает: создание HBITMAP и, вероятно, создавая BITMAP, В остальном я не уверен.

Код, о котором идет речь (несвязанные части отредактированы):

#include <windows.h>
#include <string>
#include <iostream>
#include <cpprest/http_client.h>
#include <cpprest/filestream.h>

#define ID_FILE_EXIT 9001
#define ID_FILE_SAVE 9002

using namespace utility;
using namespace web::http;
using namespace web::http::client;

const char g_szClassName[] = "myWindowClass";

utility::string_t readTheJson(web::json::value v) 
{
    for (auto iter = v.cbegin(); iter != v.cend(); ++iter)
    {
        const web::json::value &key = iter->first;
        const web::json::value &value = iter->second;

        if (key.to_string() == U("data")) {
            return value.to_string();
        }
    }
    return NULL;
}

utility::string_t uploadBitmap(BITMAP bitmap) 
{
    http_client client(L"https://api.imgur.com/3/image.json");

    char* bitString[sizeof(bitmap)+1];
    memcpy(&bitString, &bitmap.bmBits, sizeof(bitmap));

    if (bitString == NULL) {
        std::cout << "BITSTRING IS NULL" << std::endl;
    }

    uri_builder builder;
    builder.append_query(L"Client-ID", L"%%%%%%%%%%%%%%%%%%%%%");
    builder.append_query(L"image", *bitString);
    builder.append_query(L"type", L"file");
    utility::string_t builderString = builder.to_string();

    pplx::task<http_response> resp = client.request(methods::POST, builderString, L"");

    http_response response = resp.get();
    int stcode = response.status_code();
    pplx::task<web::json::value> jsonTask = response.extract_json();
    web::json::value jsonR = jsonTask.get();

    return readTheJson(jsonR);
}

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_LBUTTONDOWN:
    {
        HDC screenDC = GetDC(NULL);
        HDC compatibleScreenDC = CreateCompatibleDC(screenDC);
        HBITMAP screenBitmap = CreateCompatibleBitmap(screenDC, 1920, 1080);
        BITMAP bitmap;
        SelectObject(compatibleScreenDC, screenBitmap);

        BitBlt(compatibleScreenDC, 0, 0, 1920, 1080, screenDC, 0, 0, SRCCOPY);

        GetObject(screenBitmap, sizeof(BITMAP), &bitmap);

        DeleteDC(screenDC);
        DeleteDC(compatibleScreenDC);

        utility::string_t imgurLink = uploadBitmap(bitmap);

        OpenClipboard(NULL);
        EmptyClipboard();
        SetClipboardData(CF_TEXT, &imgurLink);
        CloseClipboard();
    }
        break;

РЕДАКТИРОВАТЬ: Я думаю, что это как-то связано с memcpy вызов,

memcpy(&bitString, &bitmap.bmBits, sizeof(bitmap));

0 ответов

Другие вопросы по тегам