Skip to content

Commit

Permalink
增加了对导出dll的支持 版本v1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
BaoZR committed Nov 19, 2021
1 parent 6b2d945 commit 685700b
Show file tree
Hide file tree
Showing 10 changed files with 94 additions and 93 deletions.
57 changes: 38 additions & 19 deletions include/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,20 @@
#include <Windows.h>


typedef unsigned char BYTE;
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef long LONG;

#ifdef DLL_EXPORT
#ifdef UTILSAPI_EXPORTS
#define UTILSAPI __declspec( dllexport ) __stdcall
#else
#define UTILSAPI __declspec( dllimport ) __stdcall
#endif
#else
#define UTILSAPI
#endif





/* bits表示一个位,要转换成字节必须 bits/8 但是这样可能产生问题,
例如该字节是32个字节则占4位,那么33个字节呢,
Expand Down Expand Up @@ -56,36 +66,43 @@ typedef struct _RGBQUAD
BYTE rgbReserved; //保留值,必须为0
} RGBQUAD_s;

size_t write_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm);

size_t read_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm);

#ifdef __cplusplus
extern "C"
{
#endif

size_t UTILSAPI write_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm);

size_t UTILSAPI read_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm);

/*@brief 枚举相对app路径下匹配到的文件名
*@param const char* addr 文件路径 相对APP的路径
*@param const char* pattern 名字匹配模板 可包含*或者?
*@param char* name_list 名字缓存路径基地址 需提前分配好内存大小
*@param int name_size 每个名字的长度
*@param int name_size 每个名字的长度
*@param name_max_count 文件名的个数,已经知道有多少文件了
*@return 返回值为找到的文件个数
*/
int list_matched_filename_app(const char* folder, const char* pattern, char* name_list, size_t name_size, int name_max_count);
int UTILSAPI list_matched_filename_app(const char* folder, const char* pattern, char* name_list, int name_size, int name_max_count);

/*@brief 打印相对app路径下匹配到的文件名
*@param const char* folder 文件夹相对APP的路径
*@param const char* pattern 名字
*/
int print_matched_filename_app(const char* folder, const char* pattern);
int UTILSAPI print_matched_filename_app(const char* folder, const char* pattern);

/*@brief 一个相对自动化的函数,可以枚举相对app路径下匹配到的文件名,要记得释放name_list中分配的内存
*@param const char* addr 文件路径 相对APP的路径
*@param const char* pattern 名字匹配模板 可包含*或者?
*@param char** name_list 名字缓存路径基地址,会在函数中分配内存,记得释放(不得不这么写,不知道要预先分配多少内存)
*@param int name_size 每个名字的长度
*@param int16_t name_size 每个名字的长度
*@param int* name_max_count 文件名的个数,会在函数中赋值。
*@return 返回值为找到的文件个数,如果为负值则发生了异常
*@author bob
*/
int auto_list_filename_app(const char* folder, const char* pattern, char** name_list, int name_size, int* name_count);
int UTILSAPI auto_list_filename_app(const char* folder, const char* pattern, char** name_list, int16_t name_size, int* name_count);


/*@brief 创建相对app路径文件的图片,
Expand All @@ -95,30 +112,30 @@ int auto_list_filename_app(const char* folder, const char* pattern, char** name_
*@param int width 图片宽
*@param int height 图片高
*/
int save_gray_bmp_app(const char* folder, const char* pre_name, unsigned char* rowdata, size_t width, size_t height);
int UTILSAPI save_gray_bmp_app(const char* folder, const char* pre_name, unsigned char* rowdata, int16_t width, int16_t height);

/**@brief 统计相对app路径文件下文件的数量
*@param const char* folder app中的文件夹
*@param const char* pattern 文件匹配模板 可包含*或者?
*@return 异常为小于0的数,非负数为文件的个数
*/
int count_filename_app(const char* folder, const char* pattern);
int UTILSAPI count_filename_app(const char* folder, const char* pattern);

/*
*在APP中建立文件夹
*/
int creat_dir_in_app(const char* filename);
int UTILSAPI creat_dir_in_app(const char* filename);

/*
* 生成指定路径的文件夹
*/
void mkdirs(const char* fullpath);
void UTILSAPI mkdirs(const char* fullpath);

/**@brief 获取app所在文件夹路径
*@param INOUT char* app_path app所在文件夹的路径,分配的内存不小于,FILENAME_MAX
*@return 是否获取成功
*/
int get_app_path(char* app_path);
int UTILSAPI get_app_path(char* app_path);

/*
* 函数名: add8GreyBmpHead
Expand All @@ -134,7 +151,7 @@ int get_app_path(char* app_path);
* 取值:0:成功,其它:无
* 其它:by pipawancui
**/
int add8GreyBmpHead(BYTE* pixData, size_t width,size_t height, BYTE* desData);
int UTILSAPI add8GreyBmpHead(BYTE* pixData, int16_t width,int16_t height, BYTE* desData);

/*
* @brief 将原始数据加上8位灰度头,输出到一个文件中
Expand All @@ -144,12 +161,14 @@ int add8GreyBmpHead(BYTE* pixData, size_t width,size_t height, BYTE* desData);
* @param const char* filepath OUT 输出的文件路径
* @return 无
*/
int add8GreyBmpHead2File(BYTE* pixData, size_t width, size_t height, const char* desFile);

int UTILSAPI add8GreyBmpHead2File(BYTE* pixData, int width, int height, const char* desFile);





#ifdef __cplusplus
}
#endif


Binary file removed raw.data
Binary file not shown.
Binary file removed rgb.png
Binary file not shown.
16 changes: 8 additions & 8 deletions utils.sln
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@ Global
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Debug|x64.Build.0 = Debug|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Debug|x86.ActiveCfg = Debug|Win32
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Debug|x86.Build.0 = Debug|Win32
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x64.ActiveCfg = Debug|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x64.Build.0 = Debug|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x86.ActiveCfg = Release|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x86.Build.0 = Release|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x64.ActiveCfg = Release|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x64.Build.0 = Release|x64
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x86.ActiveCfg = Release|Win32
{010A028F-034A-454A-8CBC-2B2742B0DF0C}.Release|x86.Build.0 = Release|Win32
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Debug|x64.ActiveCfg = Debug|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Debug|x64.Build.0 = Debug|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Debug|x86.ActiveCfg = Debug|Win32
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Debug|x86.Build.0 = Debug|Win32
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x64.ActiveCfg = Debug|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x64.Build.0 = Debug|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x86.ActiveCfg = Release|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x86.Build.0 = Release|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x64.ActiveCfg = Release|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x64.Build.0 = Release|x64
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x86.ActiveCfg = Release|Win32
{E3D42723-0CFE-4839-91FF-B8DFCD33F639}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
54 changes: 29 additions & 25 deletions utils/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@

#include "pch.h"
#include "framework.h"
#define UTILSAPI_EXPORTS
#include "../include/utils.h"



size_t write_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm)
size_t UTILSAPI write_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm)
{
FILE* fp;
fopen_s(&fp, pcFileNm, "wb+");
Expand All @@ -28,7 +29,7 @@ size_t write_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFi
return iRet;
}

size_t read_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm)
size_t UTILSAPI read_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFileNm)
{
FILE* fp;;
fopen_s(&fp, pcFileNm, "rb");
Expand All @@ -42,7 +43,7 @@ size_t read_data_hex(unsigned char* pucBuff, size_t uiBuffSize,const char* pcFil
return iRet;
}

int list_matched_filename_app(const char* folder, const char* pattern, char* name_list, size_t name_size, int name_max_count)
int UTILSAPI list_matched_filename_app(const char* folder, const char* pattern, char* name_list, int name_size, int name_max_count)
{
struct _finddata_t file_info;
intptr_t hFile;
Expand All @@ -67,15 +68,15 @@ int list_matched_filename_app(const char* folder, const char* pattern, char* nam
}
else {
do {
memcpy(name_list + index * name_size, file_info.name, name_size);
memcpy(name_list + index * name_size, file_info.name, (size_t)name_size);
index++;
} while ((_findnext(hFile, &file_info) == 0) && (index < name_max_count));
};
_findclose(hFile);
return index;
}

int print_matched_filename_app(const char* folder, const char* pattern)
int UTILSAPI print_matched_filename_app(const char* folder, const char* pattern)
{
struct _finddata_t file_info;
intptr_t hFile;
Expand Down Expand Up @@ -109,28 +110,28 @@ int print_matched_filename_app(const char* folder, const char* pattern)
return index;
}

int auto_list_filename_app(const char* folder, const char* pattern, char** name_list, int name_size, int* name_count)
int UTILSAPI auto_list_filename_app(const char* folder, const char* pattern, char** name_list, int16_t name_size, int* name_count)
{
*name_count = count_filename_app(folder, pattern);
if (*name_count < 0)
{
*name_count = 0;//保证为非负数
return -1;//返回异常值
}
*name_list = (char*)malloc(*name_count * name_size);
*name_list = (char*)malloc((size_t)(*name_count * name_size));
return list_matched_filename_app(folder, pattern, *name_list, name_size, *name_count);
}

int save_gray_bmp_app(const char* folder, const char* pre_name, unsigned char* rowdata, size_t width, size_t height)
int UTILSAPI save_gray_bmp_app(const char* folder, const char* pre_name, unsigned char* rowdata, int16_t width, int16_t height)
{
long img_head = 1078;
int img_head = 1078;
char app_path[FILENAME_MAX];
char full_path[FILENAME_MAX];
get_app_path(app_path);
//printf("%s\n", app_path);
creat_dir_in_app(folder);//保证有这个文件夹
int num = count_filename_app(folder, "*.bmp");
unsigned char* des_data = (unsigned char*)malloc(sizeof(unsigned char) * (width * height + img_head));
unsigned char* des_data = (unsigned char*)malloc(sizeof(unsigned char) * (size_t)(width * height + img_head));

add8GreyBmpHead(rowdata, width, height, des_data);//这里可以改进为直接往文件写数据

Expand All @@ -143,13 +144,13 @@ int save_gray_bmp_app(const char* folder, const char* pre_name, unsigned char* r
//printf("%s\n", full_path);
}

write_data_hex(des_data, width * height + img_head, full_path);
write_data_hex(des_data, (size_t)(width * height + img_head), full_path);

free(des_data);
return 0;
}

int count_filename_app(const char* folder, const char* pattern)
int UTILSAPI count_filename_app(const char* folder, const char* pattern)
{
struct _finddata_t file_info;
intptr_t hFile;
Expand Down Expand Up @@ -178,7 +179,7 @@ int count_filename_app(const char* folder, const char* pattern)
return count;
}

int get_app_path(char* app_path)
int UTILSAPI get_app_path(char* app_path)
{
if (GetModuleFileNameA(NULL, app_path, FILENAME_MAX) < 0)
{
Expand All @@ -188,7 +189,7 @@ int get_app_path(char* app_path)
return 0;
}

int creat_dir_in_app(const char* filename)
int UTILSAPI creat_dir_in_app(const char* filename)
{
char path[FILENAME_MAX];
get_app_path(path);
Expand All @@ -198,9 +199,9 @@ int creat_dir_in_app(const char* filename)
return 0;
}

void mkdirs(const char* fullpath)
void UTILSAPI mkdirs(const char* fullpath)
{
int i, len;
size_t i,len;
char str[FILENAME_MAX] = { 0 };
strncpy_s(str, fullpath, FILENAME_MAX);

Expand Down Expand Up @@ -232,9 +233,9 @@ void mkdirs(const char* fullpath)



int add8GreyBmpHead(BYTE* pixData, size_t width, size_t height, BYTE* desData)
int UTILSAPI add8GreyBmpHead(BYTE* pixData, int16_t width, int16_t height, BYTE* desData)
{
BYTE bitCount = 8, color = 128;
UINT32 bitCount = 8, color = 128;

BMPFILETYPE bft;
BMPFILEHEAD bfh;
Expand Down Expand Up @@ -297,7 +298,7 @@ int add8GreyBmpHead(BYTE* pixData, size_t width, size_t height, BYTE* desData)
return 0;
}

int add8GreyBmpHead2File(BYTE* pixData, size_t width, size_t height, const char* desFile)
int UTILSAPI add8GreyBmpHead2File(BYTE* pixData, int width, int height, const char* desFile)
{
BYTE bitCount = 8, color = 128;

Expand Down Expand Up @@ -361,11 +362,14 @@ int add8GreyBmpHead2File(BYTE* pixData, size_t width, size_t height, const char*

}
//给24位的灰度图加头//该函数未经过测试
int add24GreyBmpHead2File(BYTE* pixData, size_t width, size_t height, const char* desFile)
int UTILSAPI add24GreyBmpHead2File(BYTE* pixData, int16_t width, int16_t height, const char* desFile)
{
FILE* out;
fopen_s(&out, desFile, "w+b");

if (out == NULL)
{
return -1;
}
int m_nBitCount = 24;
LONG m_nHeight = height;
LONG m_nWidth = width;
Expand Down Expand Up @@ -404,12 +408,12 @@ int add24GreyBmpHead2File(BYTE* pixData, size_t width, size_t height, const char
LONG imageHeight -源图像的高度(像素数)
)
******************************************************************************/
bool Bitmap8To24(BYTE* srcImage, BYTE* dstImage, LONG imageWidth, LONG imageHeight);
bool UTILSAPI Bitmap8To24(BYTE* srcImage, BYTE* dstImage, INT imageWidth, INT imageHeight);

bool Bitmap8To24(BYTE* srcImage, BYTE* dstImage, LONG imageWidth, LONG imageHeight)
bool UTILSAPI Bitmap8To24(BYTE* srcImage, BYTE* dstImage, INT imageWidth, INT imageHeight)
{
LONG lLineBytes24 = ((imageWidth * 24 + 31) / 32 * 4);
LONG lLineBytes8 = ((imageWidth * 8 + 31) / 32 * 4);
INT lLineBytes24 = ((imageWidth * 24 + 31) / 32 * 4);
INT lLineBytes8 = ((imageWidth * 8 + 31) / 32 * 4);
int n, j;
for (int i = 0; i < imageHeight; i++)
{
Expand Down

0 comments on commit 685700b

Please sign in to comment.