由于错误LNK2019,无法调用`SetWallpaper()`

时间:2016-07-20 17:55:39

标签: c++ visual-studio winapi

简介

首先,我想说我已经阅读了此类问题的先前答案,包括this excellently written one

但是,我不太了解C ++能够使用更“高级”的修复。

我已经确保选择了正确类型的控制台(感兴趣的人Console (/SUBSYSTEM:CONSOLE)),并且具有所需的导入,可能除了某处提到的IDL(属于缺乏理解类别)

如果这是重复的,我会非常乐意使用我复制的帖子,但我找不到任何可以帮助我技能水平的人。

技术信息

IDE:Visual Studio

平台:Windows

代码

headers.h

#pragma once
#include <stdio.h>
#include <iostream>
#include <string>
#include <windows.h>
#include <Shobjidl.h>
#include <time.h>
#include <stdlib.h>
#include <tchar.h>

的main.cpp

#include "headers.h"
using namespace std;

int main() {
    string x = "C://Users/student/Desktop/i-should-buy-a-boat.jpg";
    x.c_str();

    wstring tempx = std::wstring(x.begin(), x.end());
    LPCWSTR sw = tempx.c_str();
    HRESULT SetWallpaper(
        LPCWSTR monitorID,
        LPCWSTR wallpaper
        );
    SetWallpaper(NULL, sw);
}

1 个答案:

答案 0 :(得分:2)

SetWallpaper()不是Win32 API导出的独立函数。它是IDesktopWallpaper界面的一种方法(参见here)。

所以你需要使用更像这样的代码:

#include "headers.h"

int main()
{
    std::wstring x = L"C:\\Users\\student\\Desktop\\i-should-buy-a-boat.jpg";

    CoInitialize(NULL);

    IDesktopWallpaper *p;
    if (SUCCEEDED(CoCreateInstance(__uuidof(DesktopWallpaper), 0, CLSCTX_LOCAL_SERVER, __uuidof(IDesktopWallpaper), (void**)&p)))
    {
        p->SetWallpaper(NULL, x.c_str());
        p->Release();
    }

    CoUninitialize();
    return 0;
}