BetterC Name Mangling Linker Errors
Dennis
dkorpel at gmail.com
Wed Jul 27 12:40:25 UTC 2022
On Wednesday, 27 July 2022 at 12:26:59 UTC, MyNameHere wrote:
> ```d
> void Main(void* Instance)
> {
> WNDCLASSEXA WindowClass;
> ```
This is equivalent to `WNDCLASSEXA WindowClass =
WNDCLASSEXA.init;`
If the struct's fields all initialize to 0, the compiler would
simply set the variable's bytes to 0, but the definition in
druntime gives fields with non-zero default value:
```D
struct WNDCLASSEXA {
UINT cbSize = WNDCLASSEXA.sizeof; // <-- non zero init
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
HICON hIconSm;
}
```
Because of this, the compiler defines an 'init symbol' in
druntime that gets copied into your variable to initialize it.
Because druntime isn't linked when using BetterC, the linker
fails to find the init symbol.
I think removing the default initialization will fix it:
```D
WNDCLASSEXA WindowClass = void;
```
More information about the Digitalmars-d-learn
mailing list