BetterC Name Mangling Linker Errors

MyNameHere MyNameHere at email.com
Wed Jul 27 12:26:59 UTC 2022


I have included the source to a simple 64-bit Windows program.
It compiles and runs fine with ```dmd -m64 
-L="/Subsystem:Windows" -L="/Entry:Main" Main.d```. But compiling 
with ```-betterC``` using the following throws up a linker error, 
```dmd -m64 -betterC -L="/Subsystem:Windows" -L="/Entry:Main" 
Main.d```:

```Main.obj : error LNK2019: unresolved external symbol 
_D4core3sys7windows7winuser11WNDCLASSEXA6__initZ referenced in 
function Main```

And I'm not sure why.

```d
import core.sys.windows.winuser;
import core.sys.windows.winbase;

pragma(lib, "User32.lib");
pragma(lib, "Kernel32.lib");

extern(Windows)
void Main(void* Instance)
{
     WNDCLASSEXA WindowClass;
     with (WindowClass)
     {
         cbSize        = WindowClass.sizeof;
         lpfnWndProc   = &WindowProc;
         hInstance     = Instance;
         hCursor       = LoadCursor(null, IDC_ARROW);
         lpszClassName = "Window";
     }
     RegisterClassExA(&WindowClass);
     void *WindowHandle = CreateWindowExA(0,
                                          "Window",
                                          "Window",
                                          WS_OVERLAPPEDWINDOW,
                                          CW_USEDEFAULT,
                                          CW_USEDEFAULT,
                                          CW_USEDEFAULT,
                                          CW_USEDEFAULT,
                                          null,
                                          null,
                                          Instance,
                                          null);
     ShowWindow(WindowHandle, SW_MAXIMIZE);

     MSG Message;
     while (GetMessage(&Message, null, 0, 0))
     {
         TranslateMessage(&Message);
         DispatchMessage(&Message);
     }
}

extern(Windows)
long WindowProc(void* WindowHandle, uint Message, ulong WParam, 
long LParam) nothrow @system
{
     if (Message == WM_DESTROY) ExitProcess(0);

     return DefWindowProcA(WindowHandle, Message, WParam, LParam);
}
```


More information about the Digitalmars-d-learn mailing list