需要帮助,如何在 C++ WriteFile() 中转换 bool 类型数据?
Need help, How to convert bool type data in C++ WriteFile()?
我在重写文件时遇到问题,出现此错误。也许有人可以告诉我如何转换数据类型以便重写文件
.\wInaPi.cpp: In function 'INT main(INT, CHAR**)':
.\wInaPi.cpp:30:54: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
30 | PIMAGE_DOS_HEADER image_dos_header = (PIMAGE_DOS_HEADER) file_read;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\wInaPi.cpp:76:63: error: invalid conversion from 'BOOL' {aka 'int'} to 'LPCVOID' {aka 'const void*'} [-fpermissive]
76 | WriteFile(PEFile, file_read, file_size, &returned_bytes, NULL);
| ^~~~~~~~~
| |
| BOOL {aka int}
In file included from C:/mingw64/x86_64-w64-mingw32/include/winbase.h:18,
from C:/mingw64/x86_64-w64-mingw32/include/windows.h:70,
from .\wInaPi.cpp:1:
C:/mingw64/x86_64-w64-mingw32/include/fileapi.h:186:62: note: initializing argument 2 of 'WINBOOL WriteFile(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED)'
186 | WINBASEAPI WINBOOL WINAPI WriteFile (HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
|
我的部分代码
HANDLE PEfile = CreateFileA(target_process, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (PEfile != INVALID_HANDLE_VALUE)
{
DWORD file_size = GetFileSize(x_file, NULL);
PBYTE file_buffer = PBYTE(LocalAlloc(LPTR, file_size));
DWORD returned_bytes;
BOOL file_read = ReadFile(x_file, file_buffer, file_size, &returned_bytes, NULL);
if (file_read == TRUE && returned_bytes == file_size)
{
if (SetFilePointer(PEfile, 0, NULL, FILE_BEGIN) != INVALID_SET_FILE_POINTER)
{
WriteFile(PEfile, file_read, file_size, &returned_bytes, NULL); // got error here
}
}
}
我不知道 file_read
是什么,但编译器告诉你:
- 您不应该尝试将其转换为
PIMAGE_DOS_HEADER
;
WriteFile
需要一个指针作为第二个参数:WriteFile( PEFile, &file_read,...
.
[编辑 - 问题中添加的新信息]
file_read
是 ReadFile
的结果,它是 BOOL
(成功或失败)。无论如何,您很可能不想写这个:第三个参数必须是您尝试写入的数据的大小:
WriteFile(PEfile, &file_read, sizeof(file_read), &returned_bytes, NULL);
这将解决您的编译问题,但不会解决逻辑问题。我们无法帮助您,因为不清楚您要做什么。可能是
WriteFile(PEfile, file_buffer, file_size, &returned_bytes, NULL);
?
我在重写文件时遇到问题,出现此错误。也许有人可以告诉我如何转换数据类型以便重写文件
.\wInaPi.cpp: In function 'INT main(INT, CHAR**)':
.\wInaPi.cpp:30:54: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
30 | PIMAGE_DOS_HEADER image_dos_header = (PIMAGE_DOS_HEADER) file_read;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\wInaPi.cpp:76:63: error: invalid conversion from 'BOOL' {aka 'int'} to 'LPCVOID' {aka 'const void*'} [-fpermissive]
76 | WriteFile(PEFile, file_read, file_size, &returned_bytes, NULL);
| ^~~~~~~~~
| |
| BOOL {aka int}
In file included from C:/mingw64/x86_64-w64-mingw32/include/winbase.h:18,
from C:/mingw64/x86_64-w64-mingw32/include/windows.h:70,
from .\wInaPi.cpp:1:
C:/mingw64/x86_64-w64-mingw32/include/fileapi.h:186:62: note: initializing argument 2 of 'WINBOOL WriteFile(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED)'
186 | WINBASEAPI WINBOOL WINAPI WriteFile (HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
|
我的部分代码
HANDLE PEfile = CreateFileA(target_process, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (PEfile != INVALID_HANDLE_VALUE)
{
DWORD file_size = GetFileSize(x_file, NULL);
PBYTE file_buffer = PBYTE(LocalAlloc(LPTR, file_size));
DWORD returned_bytes;
BOOL file_read = ReadFile(x_file, file_buffer, file_size, &returned_bytes, NULL);
if (file_read == TRUE && returned_bytes == file_size)
{
if (SetFilePointer(PEfile, 0, NULL, FILE_BEGIN) != INVALID_SET_FILE_POINTER)
{
WriteFile(PEfile, file_read, file_size, &returned_bytes, NULL); // got error here
}
}
}
我不知道 file_read
是什么,但编译器告诉你:
- 您不应该尝试将其转换为
PIMAGE_DOS_HEADER
; WriteFile
需要一个指针作为第二个参数:WriteFile( PEFile, &file_read,...
.
[编辑 - 问题中添加的新信息]
file_read
是 ReadFile
的结果,它是 BOOL
(成功或失败)。无论如何,您很可能不想写这个:第三个参数必须是您尝试写入的数据的大小:
WriteFile(PEfile, &file_read, sizeof(file_read), &returned_bytes, NULL);
这将解决您的编译问题,但不会解决逻辑问题。我们无法帮助您,因为不清楚您要做什么。可能是
WriteFile(PEfile, file_buffer, file_size, &returned_bytes, NULL);
?