Windows API: lld-link: error: undefined symbol: GetUserNameA

BoQsc vaidas.boqsc at gmail.com
Sat Aug 19 13:37:57 UTC 2023


Today I've tried to use Windows API once again and encountered 
very time consuming case.
It's been a long time since the last time I used Windows API.

This time I've had an idea that it would be interesting to get 
thread associated username using Windows API. So after some time 
while trying to come up with something that might seemingly work. 
I've encountered this error:

### Error
```
C:\Users\Windows10\Desktop\interpreter>dmd WindowsGetUserName.d
lld-link: error: undefined symbol: GetUserNameA
>>> referenced by WindowsGetUserName.obj:(_Dmain)
Error: linker exited with status 1

```


### The Code
```D
import std.stdio;
import core.sys.windows.windows;
import std.conv;
void main() {
     char[256] userName; // Buffer to store the user name

     DWORD userNameSize = userName.length; // Size of the buffer

     // Call GetUserName to retrieve the user name
     if (GetUserNameA(userName.ptr, &userNameSize)) {
         // Successfully retrieved the user name
         writeln("Logged-in user name: ", to!string(userName[0 .. 
userNameSize]));
     } else {
         // Failed to retrieve the user name
         int error = GetLastError();
         writeln("GetUserName failed with error code: ", error);
     }
}

```

### 1. Solution
Remember to link **advapi32.lib**
* `dmd WindowsGetUserName.d -Ladvapi32.lib`
* `rdmd -Ladvapi32.lib WindowsGetUserName.d`

### 2. Solution
Remember to include `pragma` into your source code and specify 
`advapi32.lib`

```
import std.stdio;
import core.sys.windows.windows;
import std.conv;

pragma(lib, "advapi32.lib");


void main() {
     char[256] userName; // Buffer to store the user name

     DWORD userNameSize = userName.length; // Size of the buffer

     // Call GetUserName to retrieve the user name
     if (GetUserNameA(userName.ptr, &userNameSize)) {
         // Successfully retrieved the user name
         writeln("Logged-in user name: ", to!string(userName[0 .. 
userNameSize]));
     } else {
         // Failed to retrieve the user name
         int error = GetLastError();
         writeln("GetUserName failed with error code: ", error);
     }
}

```



More information about the Digitalmars-d-learn mailing list