未解析的外部符号_MsiLocateComponentW@12.
unresolved external symbol _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
指定为Linker Input的"附加依赖项",也可以直接在代码中使用#pragma comment(lib, "msi.lib")
语句。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 检查TCHAR数组输入是否为带符号整数C++
- 用符号版本替换对函数的所有调用
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号