C++:采用添加资源的方式将模型文件悄悄封入dll
来源:互联网 发布:大数据技术与应用 编辑:程序博客网 时间:2024/06/06 05:14
本博记录为卤煮使用时的记录,如有疏漏,请指正。
卤煮:非文艺小燕儿
本博地址: 采用添加资源的方式将模型文件悄悄封入dll
对于搞神经网络和深度学习的公司来说,模型文件算是核心技术文件之一。
如果给别人SDK的时候,把模型文件以原来的样子直接给人家,无疑就是把自己的核心技术拱手送人,估计很多公司还是没有这个魄力的。
所以要么给模型加密,要么直接封入API的dll文件中。第二种无疑更保险一些。
接下来就介绍一下如何将文件封入dll。
简单来说就是通过添加资源文件的方式来实现的。
首先,你的API项目生成的目标文件是dll。
项目右键--添加--资源,选择你的模型文件,根据提示给文件起个对应的名字。
添加完成后,会生成一个resource.h文件,这个文件中的宏定义就是你刚才添加文件的名字构成的索引,之后会用它来关联你的文件。所以不要乱改其值哟。
在你要用到这些文件数据的cpp中,加俩头文件:
#include"resource.h"
#include<Windows.h>
再加俩函数
一个是加载当前module的函数
HMODULE GetCurrentModule(BOOL bRef = FALSE){HMODULE hModule = NULL;if (GetModuleHandleEx(bRef ? GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS : (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS| GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT), (LPCSTR)GetCurrentModule, &hModule)){return hModule;}return NULL;}
另一个就是如何使用资源文件中的数据的函数
BOOL load_fromResource(const int source_type, const string data_class, layer *dst){HMODULE g_hInstance;g_hInstance = GetCurrentModule();HRSRC hRes = FindResource(g_hInstance, MAKEINTRESOURCE(source_type), (LPCTSTR)data_class.c_str());if (hRes == NULL){cout << "ERROR: FindResource error." << endl;return FALSE;}HGLOBAL hResLoad = LoadResource(g_hInstance, hRes);if (hResLoad == NULL){cout << "ERROR: LoadResource error." << endl;return FALSE;}const int cbSize = SizeofResource(g_hInstance, hRes);//cout << "cbSize:" << cbSize << endl;void *lpResLock = LockResource(hResLoad);//LockResource(hResLoad)相当于把你的模型文件加载到一块内存里,内存首地址为lpResLockif (lpResLock == NULL){cout << "ERROR: LockResource error." << endl;return FALSE;}// decrypt & uncompress/*read start here,具体怎么读,就看你的数据是啥样的了*/ const int * pSource = (const int *)lpResLock; //将指针转换成你的数据的格式,如intint w = ppSource[0];//这句就类似fread(w, sizeof(int), 1, file)的功能。return TRUE;}
好啦,周末该休息啦,先简单写这些,如有遗漏,后续补正。
阅读全文
1 0
- C++:采用添加资源的方式将模型文件悄悄封入dll
- 在vb 中采用COM方式调用 matlab (将m文件打包成 dll)
- 将资源转为dll文件资源
- 采用native2ascii工具将中文字符的资源文件转换为Unicode代码格式的文件
- delphi 将Dll等生成资源文件
- delphi 将Dll等生成资源文件
- 【VC】DLL文件中添加对话框资源。。
- XCode中添加 资源文件的 正确方式
- .Net(c#)采用“晚期绑定”方式调用DLL
- .Net(c#)采用“晚期绑定”方式调用DLL
- C语言采用文本方式和二进制方式打开文件的区别分析
- 采用ATL模型代替lib dll 的调用
- C++.Net CLR 怎么添加.txt的资源文件
- 将图片资源文件整合到DLL文件中
- 将图片资源文件整合到DLL文件中
- 将图片资源文件整合到DLL文件中
- C#——在资源dll外获取其中的资源文件、图片等等
- 将w32 dll文件以资源的形式加载,并且在内存中调用
- LeetCode 94. Binary Tree Inorder Traversal
- 类中static{}和直接一对大括号{}作用
- SecureCRT的使用
- 数据结构之图(1)
- HttpClient4.5 get访问实例
- C++:采用添加资源的方式将模型文件悄悄封入dll
- c语言入门经典必背18个程序
- 51Nod
- 如何让VC++6.0程序具有XP风格
- 求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。
- Nodejs起步
- 【学习笔记】熟悉使用Visual Studio Code的快捷键
- SpringMVC 源代码深度解析BeanWrapper及其实现
- Redis操作一(curd)