BOOL GetOpenFileName(LPOPENFILENAME lpofn);  需要一个LPOPENFILENAME
lpofn
[in, out] Pointer to an OPENFILENAME structure that contains information used to initialize the dialog box. When GetOpenFileName returns, this structure contains information about the user's file selection.定义一个OPENFILENAME结构OPENFILENAME aaa;::GetOpenFileNameA (aaa);GetOpenFileNameA”: 不能将参数 1 从“OPENFILENAME”转换为“LPOPENFILENAMEA”很郁闷啊 怎么转换 微软弄这么多结构干什么 
还有啊 LPWSTR 类型 是 WCHAR 定义的   WCHAR_T 定义的麻烦不啊
wchar_t b;
aaa.lpstrFile= (LPWSTR)b;(LPWSTR)b 这样是什么意思?

解决方案 »

  1.   

    ::GetOpenFileNameA (&aaa); //LPOPENFILENAMEA要是的这种OPENFILENAME的地址。LPWSTR 也是wchar_t类型的地址指针。阁下对这个理解有问题。不要动不动就强制转换,会错的。而且你已经错了
      

  2.   

    GetOpenFileNameA (&aaa); GetOpenFileNameA”: 不能将参数 1 从“OPENFILENAME *__w64 ”转换为“LPOPENFILENAMEA”GetOpenFileNameW  会没错 aaa.lpstrFile= b;   
    无法从“wchar_t”转换为“LPWSTR”
      

  3.   

    OPENFILENAMEA aaa; 
    ::GetOpenFileNameA(&aaa);OPENFILENAMEW aaa; 
    ::GetOpenFileNameW(&aaa);OPENFILENAME aaa; 
    ::GetOpenFileName(&aaa);三种都可以,第一种是ANSI下用的,第二种需要UNICODE,第三种是2种字符集下都可以使用,一般我们会用第三种。保证代码以后更改为UNICODE不会报错。
      

  4.   

    宽字符和多字节没有理解,每个API都有ANSI版和Unicode版,在系统内核中只有Unicode版的。这是为了语言的通用性
      

  5.   

    数组,结构,指针你搞得很不清楚。你看前面带LP的就是指针了,带W的就要用宽字节,为了数组的通用性你不妨用TCHAR