c++ - 未解析的外部符号 _MsiLocateComponentW@12
问题描述
我知道简单地发布代码并寻求解决方案并不是一个好主意,但我不知道是什么原因造成的。
我正在尝试根据此代码查找 PowerPoint 的安装路径,但是,编译器给出了此错误:
error LNK2019: unresolved external symbol _MsiLocateComponentW@12 referenced in function _WinMain@16
我正在使用 Visual Studio 2019 并且 IntelliSense 没有注意到错误,只有编译器。这是代码:
#include <Windows.h>
#include <msi.h>
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) {
LPCWSTR PowerPoint = L"{CC29E94B-7BC2-11D1-A921-00A0C91E2AA2}";
DWORD size = 300;
INSTALLSTATE installstate;
LPWSTR sPath;
sPath = new wchar_t[size];
installstate = MsiLocateComponent(PowerPoint, sPath, &size);
if (installstate == INSTALLSTATE_LOCAL || installstate == INSTALLSTATE_SOURCE)
MessageBox(NULL, sPath, L"PowerPoint path", MB_OK | MB_ICONASTERISK );
delete[] sPath;
return 0;
}
如您所见,我包含了msi.h
标题。我的代码有什么问题?
解决方案
您收到的是链接器错误,而不是编译器错误。
确保您的项目链接到msi.lib
. 仅使用msi.h
是不够的。
msi.h
告诉编译器函数看起来像什么,以便您的代码可以调用它。
但是您还需要告诉链接器该函数实际位于何处。msi.lib
告诉链接器该函数是从 导出的msi.dll
,因此链接器可以将您的函数调用链接到该 DLL。
要链接到msi.lib
,您可以msi.lib
在项目选项中为链接器输入指定“附加依赖项”,也可以#pragma comment(lib, "msi.lib")
直接在代码中使用语句。
推荐阅读
- powerquery - 无法识别 Text.InferNumberType 的 Expression.Error
- django - 如何仅在通过 iframe 从 Django 中的特定域访问时才允许渲染视图?
- javascript - 带有 html-pdf npm 的动态 PDF
- python - 即使没有引发异常,Django transaction.commit_on_success 也会回滚
- python - 为什么第一次向 Django 服务器请求时响应如此缓慢
- perl - 如何预防/控制 Moose 使用忏悔
- python - 查找列表中具有部分内容匹配的所有项目
- julia - (Julia 1.x)通过初始化变量增加分配?
- npm - Allure 报告执行但未能填充数据 - Jasmine 和 Protractor
- google-maps - 是否可以使用google places detail api获取的经纬度从geoname表中获取geonameid?