digitalmars.D - Importing dwmapi.dll
- Ian Martinez (27/27) Sep 15 2012 I'm new to D(really new, just learned it today) and I'm making a
- jerro (16/40) Sep 15 2012 This line should be
- Ian Martinez (2/43) Sep 15 2012 Thank you so much!!
I'm new to D(really new, just learned it today) and I'm making a little program that I want to extend the aero glass into I've written this: struct MARGINS { int cxLeftWidth; int cxRightWidth; int cyTopHeight; int cyBottomHeight; } HRESULT extendaeroglass(HWND handle,int left,int right,int top,int bottom){ MARGINS aeromargins = {left,right,top,bottom}; HRESULT hr = IDOK; hr = DwmExtendFrameIntoClientArea(handle,aeromargins); return hr; } But I can't seem to figure out how to import dwmapi, I googled and there was something that said I'd have to translate the header file(dwmapi.h) which is 532 lines long, which I can't do that well because I'm not that good at D and my C/C++ is even worse and another page said I need to include the .lib file(converted from COFF) in it, which I did and it still won't work: Error:undefined identifier DwmExtendFrameIntoClientArea Is there any easier way to import a Win32 dll like dwmapi? Any help will be GREATLY appreciated because I have been searching for hours.
Sep 15 2012
On Sunday, 16 September 2012 at 00:27:19 UTC, Ian Martinez wrote:I'm new to D(really new, just learned it today) and I'm making a little program that I want to extend the aero glass into I've written this: struct MARGINS { int cxLeftWidth; int cxRightWidth; int cyTopHeight; int cyBottomHeight; } HRESULT extendaeroglass(HWND handle,int left,int right,int top,int bottom){ MARGINS aeromargins = {left,right,top,bottom}; HRESULT hr = IDOK; hr = DwmExtendFrameIntoClientArea(handle,aeromargins);This line should be hr = DwmExtendFrameIntoClientArea(handle,&aeromargins);return hr; } But I can't seem to figure out how to import dwmapi, I googled and there was something that said I'd have to translate the header file(dwmapi.h) which is 532 lines long, which I can't do that well because I'm not that good at D and my C/C++ is even worse and another page said I need to include the .lib file(converted from COFF) in it, which I did and it still won't work: Error:undefined identifier DwmExtendFrameIntoClientAreaThe functions need to be declared if you want to use them. For c libraries you usually import modules that contain the declarations, but when there isn't one already written, you need to declare them yourself. You don't need to translate all of dwmapi.h, just the parts that you use. For DvmExtendFrameIntoClientArea you would do this: extern(Windows) HRESULT DwmExtendFrameIntoClientArea(HWND, MARGINS*); This tells the compiler that there is a functions with this name, parameter types, return type and using Windows name mangling and calling convention. The implementation of this function needs to be available when linking, which is why the .lib file is also needed.
Sep 15 2012
On Sunday, 16 September 2012 at 02:22:42 UTC, jerro wrote:On Sunday, 16 September 2012 at 00:27:19 UTC, Ian Martinez wrote:Thank you so much!!I'm new to D(really new, just learned it today) and I'm making a little program that I want to extend the aero glass into I've written this: struct MARGINS { int cxLeftWidth; int cxRightWidth; int cyTopHeight; int cyBottomHeight; } HRESULT extendaeroglass(HWND handle,int left,int right,int top,int bottom){ MARGINS aeromargins = {left,right,top,bottom}; HRESULT hr = IDOK; hr = DwmExtendFrameIntoClientArea(handle,aeromargins);This line should be hr = DwmExtendFrameIntoClientArea(handle,&aeromargins);return hr; } But I can't seem to figure out how to import dwmapi, I googled and there was something that said I'd have to translate the header file(dwmapi.h) which is 532 lines long, which I can't do that well because I'm not that good at D and my C/C++ is even worse and another page said I need to include the .lib file(converted from COFF) in it, which I did and it still won't work: Error:undefined identifier DwmExtendFrameIntoClientAreaThe functions need to be declared if you want to use them. For c libraries you usually import modules that contain the declarations, but when there isn't one already written, you need to declare them yourself. You don't need to translate all of dwmapi.h, just the parts that you use. For DvmExtendFrameIntoClientArea you would do this: extern(Windows) HRESULT DwmExtendFrameIntoClientArea(HWND, MARGINS*); This tells the compiler that there is a functions with this name, parameter types, return type and using Windows name mangling and calling convention. The implementation of this function needs to be available when linking, which is why the .lib file is also needed.
Sep 15 2012