C ++ \\\\ CLI中的本机winAPI
|
我使用Windows窗体应用程序的类型启动了一个新项目,然后放置了两个文本框(textbox1和textbox2)和一个按钮。我使用OpenFileDialog从系统中选择一个文件,并将其路径放在textbox1中,为该按钮放置以下代码:
HANDLE hFile;
HANDLE hMap ;
LPVOID base;
hFile = ::CreateFile((LPCWSTR)Marshal::StringToHGlobalAnsi(this->textBox1->Text).ToPointer(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING , FILE_FLAG_SEQUENTIAL_SCAN, 0);
unsigned long sifi= ::GetFileSize(hFile,NULL);
if(hFile !=INVALID_HANDLE_VALUE){
hMap= ::CreateFileMapping(hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0);//create Mem mapping for the file in virtual memory
}
if( hMap!=NULL){
base = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);//load the mapped file into the RAM
}
this->textBox2->Text=sifi.ToString();
我要用该代码执行的操作是从textbox1读取文件路径,以将其用于打开文件句柄,然后获取文件的大小并将其放入textbox2。现在的问题是,textbox2显示的文件大小值不正确。所有文件似乎总是像4294967295!
编辑:
谢谢大家,我已经解决了问题。它在CreateFile的第一个参数中,它假定为:
(LPCWSTR)Marshal::StringToHGlobalUni(this->textBox1->Text).ToPointer()
没有找到相关结果
已邀请:
2 个回复
眠缝
代替
。但是以为您的“ 4”通话失败了。
不接受
。您正在将字符串转换为ANSI,然后将其传递给
的Unicode版本,该版本也已损坏。 只需使用Unicode,如下所示:
讹巳漓把备