Win64下的GetUserName

时间:2010-11-20 10:57:38

标签: c winapi 64-bit

我正在尝试使用MINGW / 64下的Intel icl编译器编译C程序。该程序使用以下代码:

#include <Userenv.h>
HANDLE process;
HANLDE token;
GetUserProfileDirectory(process, TOKEN_QUERY, &ptoken)

我使用以下编译命令:

$ icl -g -DMINGW32 -DTESTMAIN user.c -o user -UserEnv.Lib

我正在链接来自Microsoft SDK的UserEnv.Lib。

英特尔(R)C ++英特尔(R)64编译器XE,适用于在英特尔(R)64上运行的应用程序,版本Microsoft(R)增量链接器版本9.00.21022.08     退房手续:USER.EXE     user.obj

user.obj : error LNK2019: unresolved external symbol __imp_GetUserProfileDirectoryA referenced in function main

知道如何解决这个问题吗?

SOLUTION:
解决方案是使用

/ link / c / Program \ Files / Microsoft \ SDKs / Windows / v6.0A / Lib / x64 / UserEnv.Lib / c / Program \ Files / Microsoft \ SDKs / Windows / v6.0A / Lib / x64 /甲


我将Microsoft SDK(x64,6.0)中的UserEnv.lib文件复制到当前工作目录中并使用

编译程序

$ icl test.c -DMINGW32 ./UserEnv.Lib

LNK2019:函数main test.obj中引用的未解析的外部符号__imp_GetUserNameA:错误LNK2019:函数main test.obj中引用的未解析的外部符号__imp_OpenProcessToken:错误LNK2019:未解析的外部符号 -

我仍然得到未解决的符号。

奥拉夫

1 个答案:

答案 0 :(得分:0)

您需要将userenv.lib添加到输入库,以便链接器查看GetUserProfileDirectory()

编辑:自从我接触到英特尔编译器以来已经有一段时间了,但是IIRC您应该使用/link来引入链接器选项:

$ icl test.c -DMINGW32 /link ./UserEnv.Lib