hur.cn - 华软网

 热门搜索

传递一个指针参数

  作者:未知    来源:网络    更新时间:2011/10/5
代码,谢谢.
C++">
void _openfile(PTSTR lpszfile)
{
...

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwinmain;
ofn.lpstrFile = lpszfile;      //这个用参数传递就不行,求解
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = _countof(szFile);
ofn.lpstrFilter = _T("All File\0*.*\0");
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
...
}


int main(){
TCHAR szFile[MAX_PATH];
_openfile(szFile);
...



这个咋就不行呢,求解,感谢.
---华软 网友回答---
TCHAR szFile[MAX_PATH];

这个只是定义了,没赋值
---华软网友回复---
如果把TCHAR szFile[MAX_PATH];声名为_openfile的局部变量,没赋值也可以,为什么?
---华软网友回复---
就是
C++">
void _openfile(PTSTR lpszfile)
{
    ...
    TCHAR szFile[MAX_PATH]
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hwinmain;
    ofn.lpstrFile = szFile;      //这个用参数传递就不行,求解
    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
    // use the contents of szFile to initialize itself.
    ofn.lpstrFile[0] = '\0';

---华软网友回复---
1楼应该是对的。

如果把TCHAR szFile[MAX_PATH];声名为_openfile的局部变量,没赋值也可以。

其实没有用:

下一行:ofn.lpstrFile[0] = '\0';

还是清零了。
---华软网友回复---
问题出在_countof(szFile) 上,
看看msdn关于 _countof 宏的解释
Ensure that array is actually an array, not a pointer. In C, 
_countof will produce erroneous results if array is a pointer. 
In C++, _countof will fail to compile if array is a pointer.
传递给宏_countof的参数一定是真是的数组,而不能是个指针
所以上述代码可调整为
//加个参数
void _openfile(PTSTR lpszfile,int nCount)
  {
    ofn.lpstrFile = lpszfile;      //这个用参数传递就不行,求解
    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
    // use the contents of szFile to initialize itself.
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile =nCount;
   
}
调用时
 _openfile(szFile,sizeof(szFile)/sizeof(TCHAR));

     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。