yuzhiboqianyuan 发表于 2024-10-11 15:29
就是如何表示这里的 读入文件 函数
请用C++写出上面API组合代码
.
以下是使用C++编写的代码示例,展示了如何使用上述API组合将文件内容加载到内存缓冲区:
.
```cpp
#include <iostream>
#include <Windows.h>
int main() {
// 打开文件
HANDLE hFile = CreateFile(
"example.txt", // 文件路径
GENERIC_READ, // 打开方式:只读
FILE_SHARE_READ, // 共享访问权限:允许其他进程读取
NULL, // 安全属性(默认)
OPEN_EXISTING, // 打开选项:已存在的文件
FILE_ATTRIBUTE_NORMAL, // 文件属性:普通文件
NULL // 模板文件句柄(不使用)
);
if (hFile == INVALID_HANDLE_VALUE) {
std::cerr << "无法打开文件。错误码:" << GetLastError() << std::endl;
return 1;
}
// 创建文件映射对象
HANDLE hMapFile = CreateFileMapping(
hFile, // 文件句柄
NULL, // 安全属性(默认)
PAGE_READONLY, // 保护类型:只读
0, // 高位文件大小(低32位为文件大小)
0, // 低位文件大小(低32位为文件大小)
NULL // 映射名称(不使用)
);
if (hMapFile == NULL) {
std::cerr << "无法创建文件映射。错误码:" << GetLastError() << std::endl;
CloseHandle(hFile);
return 1;
}
// 文件映射视图到内存
LPVOID lpbuffer = MapViewOfFile(
hMapFile, // 文件映射对象的句柄
FILE_MAP_READ, // 访问权限:只读
0, // 高位偏移量(低32位为偏移量)
0, // 低位偏移量(低32位为偏移量)
0 // 映射视图的大小(0表示整个文件)
);
//lpbuffer 是32位指针,里面装缓冲区的内存地址.
if (lpbuffer == NULL) {
std::cerr << "文件映射视图失败。错误码:" << GetLastError() << std::endl;
CloseHandle(hMapFile);
CloseHandle(hFile);
return 1;
}
// 在此处,可以使用lpbuffer指针访问文件内容
// 易语言 在DLL命令名。yolo5_detect( )的参数2 data。把数据类型,从字节集 修改成 整数型。TC的dllcall( ) 里面,直接声明为"long"类型.
// 易语言 在yolo5_detect( ) 调用行,lpbuffer定义成整数型,lpbuffer传入yolo5_detect( )的参数2。TC的dllcall( ) 调用行,直接传入lpbuffer.
// 解除映射视图,和关闭文件映射对象句柄
//UnmapViewOfFile(lpbuffer);//解除映射视图OfFile。我们需要用到lpbuffer,暂时不解除.
CloseHandle(hMapFile);
CloseHandle(hFile);
return 0;
}
```
请注意,此示例假设您已经有一个名为`example.txt`的文件存在于程序运行的目录中。在实际使用时,请确保替换为您要处理的实际文件名,并根据需要调整代码以适应您的具体需求。
.
以上4个API,放到易语言也能调用。
新建一个 读入文件2( ),把4个API封装进去,能够替代 读入文件( ) |