не существует подходящей функции преобразования из "std :: string" в "PVOID" - PullRequest
2 голосов
/ 02 февраля 2011

Я пытаюсь использовать функцию SetParametersInfo для изменения обоев. Я хотел бы передать путь к файлу для обоев в качестве переменной, но всякий раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке

Error: no suitable conversion function from "std::string" to "PVOID" exists

Вот код, который у меня есть до сих пор

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
#pragma comment(lib, "user32.lib")
using namespace std;

#define _TEXT(x) L##x

void main(){
    string input ="";
    cout << "Enter the filepath\n";
    getline(cin, input);

    BOOL success = SystemParametersInfo(
    SPI_SETDESKWALLPAPER,   //iuAction
    0,                      //uiParam
    input,                  //pvParam
    SPIF_UPDATEINIFILE      //fWinIni
    );
    if (success){
        printf("Success!\n");
    }else
        printf("Failure =(\n");
}

У вас, ребята, есть предложения, что я могу сделать?Я обыскал все, чтобы найти решение, но не смог его найти.Возможно, я не ищу правильные термины.

Дополнительная информация: Я использую Windows 7 и использую Visual Studio 2010 Ultimate.

Редактировать: Я наконец заставил его работать.Мне пришлось изменить настройку «Набор символов» на «Не установлен», тогда она работала нормально.Вот обновленный код:

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
#pragma comment(lib, "user32.lib")
using namespace std;

void main(){
    string input ="";
    cout << "Enter the filepath\n";
    getline(cin, input);

    BOOL success = SystemParametersInfo(
    SPI_SETDESKWALLPAPER,   //iuAction
    0,                      //uiParam
    (PVOID) input.c_str(),  //pvParam
    SPIF_UPDATEINIFILE      //fWinIni
    );
    if (success){
        printf("Success!\n");
    }else{
        printf("Failure =(\n ");
        cout << input << "\n";
        cout << (PVOID) input.c_str()<< "\n";
    }
}

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

input.c_str () вернет const char *, который неявно преобразуется в PVOID.

Передайте input.c_str () в SystemParametersInfo, и он должен работать.

* Убедитесь, что это не скомпилировано с UNICODE = 1, потому что тогда SystemParametersInfo перенаправляется в SystemParametersInfoW, который ожидает std :: wstring, а не std :: string.

Если вы действительно хотите форсировать строку ascii даже при компиляции UNICODE, тогда вызовите SystemParametersInfoA явно.

0 голосов
/ 02 февраля 2011

string :: c_str () вернет указатель const char *, затем вам может потребоваться выполнить приведение типа указателя, чтобы заставить SystemParametersInfo работать.

BOOL success = SystemParametersInfo(
SPI_SETDESKWALLPAPER,   //iuAction
0,                      //uiParam
(PVOID)input.c_str(),                  //pvParam
SPIF_UPDATEINIFILE      //fWinIni
);
0 голосов
/ 02 февраля 2011
BOOL success = SystemParametersInfo(
SPI_SETDESKWALLPAPER,   //iuAction
0,                      //uiParam
(PVOID)input.c_str(),   //pvParam
SPIF_UPDATEINIFILE      //fWinIni
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...