LRESULT OnSigned(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)//签名
{
// TODO : Add Code for control notification handler.
//--------------------------------------------------------------计算文件Hash值
OPENFILENAME ofn;
char * szFile = new char[100];
if(NULL == szFile)
{
return FALSE;
}
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWndCtl;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '/0';
ofn.nMaxFile = 100;
ofn.lpstrFilter = "All Files(*.*)/0*.*/0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NODEREFERENCELINKS;
if(GetOpenFileName(&ofn)==TRUE)
{
LPTSTR m=ofn.lpstrFile;
byte buffer[SHA::DIGESTSIZE];
SHA sha;
FileSource hash(m, true, new HashFilter(sha,
new HexEncoder(new ArraySink(buffer,2 * SHA::DIGESTSIZE))));
//------------------------------------------------------------------计算文件的hash值
}
}
这里m为局部的,FileSource hash(m, true,不会出问题。
但是如果把m定义成全局的,就出现问题比如:
LPTSTR m=ofn.lpstrFile;
LRESULT OnClickedButton1(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)//浏览目录选择文件
{
OPENFILENAME ofn;
char * szFile = new char[100];
if(NULL == szFile)
{
return FALSE;
}
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWndCtl;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '/0';
ofn.nMaxFile = 100;
ofn.lpstrFilter = "All Files(*.*)/0*.*/0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NODEREFERENCELINKS;
if(GetOpenFileName(&ofn)==TRUE)
{
m=ofn.lpstrFile;
//CWindow ctrl = GetDlgItem( IDC_EDIT1 );
//ctrl.SetWindowText(m);
}
return 0;
}
再在另一个里面用m;
LRESULT OnSigned(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)//签名
{byte buffer[SHA::DIGESTSIZE];
SHA sha;
FileSource hash(m, true, new HashFilter(sha,
new HexEncoder(new ArraySink(buffer,2 * SHA::DIGESTSIZE))));
}
这样程序执行就会出问题。
我想知道这样定义的全局的跟局部的有什么区别,怎么会这样?