Thread overview
How to call a GDI+ function from D ?
Jun 05, 2022
Vinod K Chandran
Jun 05, 2022
rikki cattermole
Jun 05, 2022
Vinod K Chandran
Jun 05, 2022
Vinod K Chandran
June 05, 2022

Hi all,
I want to call the Bitmap function from gdi+. This is the syntax of the function in C++.

void Bitmap(
  [in] const WCHAR *filename,
  [in] BOOL        useEmbeddedColorManagement
);

And this is the mangled name which I got from goldbolt compiler.
?Bitmap@@YAXPEB_WH@Z

Now, this is my declaration in D.

extern (C++, "Bitmap") void * Bitmap(const(wchar)* file, BOOL useClr);

And this is my call site.

auto imgPath = toUTF16z(r"C:\Users\AcerLap\Pictures\Saved Pictures\d3.png") ;
auto pBmp = Bitmap(imgPath, FALSE);

But I got this error message.

app.obj : error LNK2019: unresolved external symbol "void * __cdecl Bitmap::Bitmap(char16_t const *,int)" (?Bitmap@0@YAPAXPB_SH@Z) referenced in function __D4wing9imagelist9ImageList8addImageMFAyaZv
app.exe : fatal error LNK1120: 1 unresolved externals
Error: linker exited with status 1120

You see, the mangled names are different.
From D - ?Bitmap@0@YAPAXPB_SH@Z
From C++ - ?Bitmap@@YAXPEB_WH@Z
How to fix this ?

June 05, 2022
Bitmap is a class, not a namespace.

The function you want is actually a constructor.

https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/gdiplus/gdiplusheaders.h#L179
June 05, 2022
On Sunday, 5 June 2022 at 10:57:16 UTC, rikki cattermole wrote:
> Bitmap is a class, not a namespace.
>
> The function you want is actually a constructor.
>
> https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/gdiplus/gdiplusheaders.h#L179

Thank you for the reply. Well, I know that it is a CTOR. But I thought this is the D way to call it.
June 05, 2022
On Sunday, 5 June 2022 at 11:33:14 UTC, Vinod K Chandran wrote:
>

For future readers of this thread, rikki cattermole helped me to findthe solution to this problem. I Do not need the C++ classes or their methods for this. There is a set of C functions in gdiplus.dll. Check this link. https://docs.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-flatapi-flat