digitalmars.D.learn - How to call a GDI+ function from D ?
- Vinod K Chandran (35/35) Jun 05 2022 Hi all,
- rikki cattermole (3/3) Jun 05 2022 Bitmap is a class, not a namespace.
- Vinod K Chandran (3/6) Jun 05 2022 Thank you for the reply. Well, I know that it is a CTOR. But I
- Vinod K Chandran (6/6) Jun 05 2022 On Sunday, 5 June 2022 at 11:33:14 UTC, Vinod K Chandran wrote:
Hi all, I want to call the Bitmap function from gdi+. This is the syntax of the function in C++. ```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. ```d extern (C++, "Bitmap") void * Bitmap(const(wchar)* file, BOOL useClr); ``` And this is my call site. ```d 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 ?
Jun 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
Jun 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#L179Thank you for the reply. Well, I know that it is a CTOR. But I thought this is the D way to call it.
Jun 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
Jun 05 2022