C++:リソースを追加することでモデルファイルをdllにこっそり封入
2482 ワード
このブログは、煮込み使用時の記録ですが、漏れがあればご指摘ください.
ハロゲン煮:非文芸ツバメ
このブログのアドレス:リソースを追加することでモデルファイルをdllにこっそりカプセル化
ニューラルネットワークと深い学習を行う会社にとって、モデルファイルは核心技術ファイルの一つです.
他の人にSDKを渡すとき、モデルファイルをそのまま渡すと、間違いなく自分のコアテクノロジーを人に渡すので、多くの会社がこの迫力を持っていないと思います.
したがって、モデルを暗号化するか、APIのdllファイルに直接カプセル化します.2つ目は間違いなくもっと安全です.
次に、dllにファイルをカプセル化する方法について説明します.
簡単に言えば、リソースファイルを追加することで実現されます.
まず、あなたのAPIプロジェクトが生成したターゲットファイルはdllです.
プロジェクトの右クリック--追加--リソース、モデルファイルを選択し、プロンプトに従ってファイルに対応する名前を付けます.
追加が完了するとresourceが生成されます.hファイル、このファイルのマクロ定義は、さっきファイルの名前を追加して構成されたインデックスであり、その後、ファイルに関連付けられます.だからむやみに値を変えないでね.
これらのファイルデータを使用するcppに、2つのヘッダファイルを追加します.
#include"resource.h"#include
2つの関数を追加
1つは現在のmoduleをロードする関数です
もう1つは、リソースファイルのデータをどのように使用するかの関数です.
はい、週末は休みです.まず簡単に書きます.もし漏れがあれば、後続の補正をします.
ハロゲン煮:非文芸ツバメ
このブログのアドレス:リソースを追加することでモデルファイルをdllにこっそりカプセル化
ニューラルネットワークと深い学習を行う会社にとって、モデルファイルは核心技術ファイルの一つです.
他の人にSDKを渡すとき、モデルファイルをそのまま渡すと、間違いなく自分のコアテクノロジーを人に渡すので、多くの会社がこの迫力を持っていないと思います.
したがって、モデルを暗号化するか、APIのdllファイルに直接カプセル化します.2つ目は間違いなくもっと安全です.
次に、dllにファイルをカプセル化する方法について説明します.
簡単に言えば、リソースファイルを追加することで実現されます.
まず、あなたのAPIプロジェクトが生成したターゲットファイルはdllです.
プロジェクトの右クリック--追加--リソース、モデルファイルを選択し、プロンプトに従ってファイルに対応する名前を付けます.
追加が完了するとresourceが生成されます.hファイル、このファイルのマクロ定義は、さっきファイルの名前を追加して構成されたインデックスであり、その後、ファイルに関連付けられます.だからむやみに値を変えないでね.
これらのファイルデータを使用するcppに、2つのヘッダファイルを追加します.
#include"resource.h"#include
2つの関数を追加
1つは現在の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;
}
もう1つは、リソースファイルのデータをどのように使用するかの関数です.
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) , lpResLock
if (lpResLock == NULL)
{
cout << "ERROR: LockResource error." << endl;
return FALSE;
}
// decrypt & uncompress
/*read start here, , */
const int * pSource = (const int *)lpResLock; // , int
int w = ppSource[0];// fread(w, sizeof(int), 1, file) 。
return TRUE;
}
はい、週末は休みです.まず簡単に書きます.もし漏れがあれば、後続の補正をします.