win32 api & lib issue

Imperatorn johan_forsberg_86 at hotmail.com
Thu Nov 2 09:01:06 UTC 2023


On Thursday, 2 November 2023 at 08:31:41 UTC, Peter Hu wrote:
> Greetings!
>
> From time to time I encountered issues on the subjected after I 
> upgraded my dmd package.Given below code :
>
> import core.sys.windows.windows;
> import core.sys.windows.commdlg;
> import core.sys.windows.winuser;
>
> extern(Windows) BOOL GetOpenFileNameW(LPOPENFILENAMEW);
> extern(Windows) int MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT);
>
>     void main()
>     {
>     	wchar[256] fileName;
>     	fileName[0]=0;
>     	OPENFILENAMEW ofn;
>     	
>     	ofn.lStructSize=OPENFILENAMEW.sizeof;
>     	ofn.lpstrFilter=
>     	"Text Files\0*.txt\0 D files\0*.d;*.di\0\0"w.ptr;
>     	ofn.lpstrFile=fileName.ptr;
>     	ofn.nMaxFile=fileName.length;
>     	if(GetOpenFileNameW(&ofn))
>     	{
>     		MessageBoxW(null,ofn.lpstrFile,"File Selected:"w.ptr,0);	
>     	}
>     }
>
> The compiler failed to build this small program.It complains 
> GetOpenFileNameW & MessageBoxW are unresolved external symbol.
>
> DMD 2.103+VS Community 2015+Win10 64bit.
>
> estwinapi.obj : error LNK2019: 无法解析的外部符号 
> _GetOpenFileNameW at 4,该符号在函数 __Dmain 中被引用
> testwinapi.obj : error LNK2019: 无法解析的外部符号 
> _MessageBoxW at 16,该符号在函数 __Dmain 中被引用
> testwinapi.exe : fatal error LNK1120: 2 个无法解析的外部命令
>
> Error: linker exited with status 1120
>
> Appreciated any help on figuring me out what the issue is and 
> how to fix it.

Works for me.

But you don't need to declare the functions, they are already 
declared in commdlg and winuser.

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

void main()
{
	wchar[256] fileName;
	fileName[0]=0;
	OPENFILENAMEW ofn;
	
	ofn.lStructSize=OPENFILENAMEW.sizeof;
	ofn.lpstrFilter=
	"Text Files\0*.txt\0 D files\0*.d;*.di\0\0"w.ptr;
	ofn.lpstrFile=fileName.ptr;
	ofn.nMaxFile=fileName.length;

	if(GetOpenFileNameW(&ofn))
	{
		MessageBoxW(null,ofn.lpstrFile,"File Selected:"w.ptr,0);	
	}
}
```


More information about the Digitalmars-d-learn mailing list