C++ 来自powrpof.h的CallNtPowerInformation具有链接器错误的新项目

C++ 来自powrpof.h的CallNtPowerInformation具有链接器错误的新项目,c++,winapi,linker-errors,C++,Winapi,Linker Errors,我刚刚在VisualStudio2017 RC中创建了一个新项目(Win32 Console应用程序),并对其进行了编码,据我所知,该项目应该可以正常工作 #include "stdafx.h" #include <string> #include <iostream> #include <windows.h> #include "PowrProf.h Or Powerbase.h" using namespace std; int main(int argc

我刚刚在VisualStudio2017 RC中创建了一个新项目(Win32 Console应用程序),并对其进行了编码,据我所知,该项目应该可以正常工作

#include "stdafx.h"
#include <string>
#include <iostream>
#include <windows.h>
#include "PowrProf.h Or Powerbase.h"
using namespace std;
int main(int argc, _TCHAR* argv[])
{
    SYSTEM_POWER_POLICY PowerPlugged;
    SYSTEM_POWER_POLICY PowerUnPlugged;
    POWER_ACTION_POLICY ActionPlugged;
    POWER_ACTION_POLICY ActionUnPlugged;
    CallNtPowerInformation(SystemPowerPolicyAc, NULL, 0, &PowerPlugged, sizeof(SYSTEM_POWER_POLICY));
    CallNtPowerInformation(SystemPowerPolicyDc, NULL, 0, &PowerUnPlugged, sizeof(SYSTEM_POWER_POLICY));
    ActionPlugged.Action = PowerActionNone;
    ActionUnPlugged.Action = PowerActionNone;
    PowerPlugged.LidClose = ActionPlugged;
    PowerUnPlugged.LidClose = ActionUnPlugged;
    CallNtPowerInformation(SystemPowerPolicyAc, &PowerPlugged, sizeof(SYSTEM_POWER_POLICY), NULL, 0);
    CallNtPowerInformation(SystemPowerPolicyDc, &PowerUnPlugged, sizeof(SYSTEM_POWER_POLICY), NULL, 0);

    string yaes;
    getline(cin, yaes);
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括“powrpof.h或Powerbase.h”
使用名称空间std;
int main(int argc,_TCHAR*argv[]
{
系统电源策略电源插拔;
系统\电源\策略电源已拔出;
权力(行动)政策(行动);;
电源(行动)政策(行动)未插电;;
CallNtPowerInformation(SystemPowerPolicyAc、NULL、0和powerplucked、sizeof(SYSTEM_POWER_POLICY));
CallNtPowerInformation(SystemPowerPolicyDc,NULL,0,&powerplugged,sizeof(SYSTEM\u POWER\u POLICY));
actionplucked.Action=PowerActionNone;
ActionUnPlugged.Action=PowerActionNone;
powerplucked.LidClose=actionplucked;
powerplugged.LidClose=actionplugged;
CallNtPowerInformation(SystemPowerPolicyAc和powerplucked,sizeof(SYSTEM\u POWER\u POLICY),NULL,0);
CallNtPowerInformation(SystemPowerPolicyDc和powerplugged,sizeof(SYSTEM\u POWER\u POLICY),NULL,0);
串yaes;
getline(cin,yaes);
返回0;
}
现在我很抱歉,如果这是一个愚蠢的问题,但我真的从来没有处理过链接器,代码没有给我错误。当然,建筑时除外

报告的备注部分对此只字不提

我使用的是Windows10,我尝试过包括Powerbase.h、powrpof.h。两者都给了我完全相同的错误:

LNK2019:未解析的外部符号_CallNtPowerInformation@20 在函数中引用 _主电池设置c:\Users\Baddouting\documents\visual studio 2017\Projects\BatterySettings\BatterySettings\BatterySettings.obj

当然

LNK1120 1未解析外部电池设置c:\users\亵渎(我是 只是为了好玩,用户名是相同的)\documents\visualstudio 2017\Projects\BatterySettings\Debug\BatterySettings.exe

那么我做错了什么?
谢谢。

当你加入powrpof.h时,试着这样做

extern "C" {
#include <Powrprof.h>

}
#pragma comment(lib, "Powrprof.lib")
extern“C”{
#包括
}
#pragma注释(lib,“powrpof.lib”)

如果不是这样,您是否尝试过进行干净的重建?

有效。你介意解释一下怎么做/为什么吗?@ninjaiceflame-你用的-所以它必须在某处实现。如果您阅读文档-它是在
PowrProf.dll中实现的
-因此您需要链接到
PowrProf.lib
@RbMm获得了该部分,我不明白的是
extern“c”
的用途。我试着不使用它,它工作。@ Trist:它告诉编译器在编译C++时使用C(与标准C++链接)。您不需要它,因为WindowsAPI头已经指定了C链接。这就是你得到的。