将ncnn的param作为资源文件的调用
添加资源
Visual Studio里添加资源 在所选项目上右键-添加-资源,弹出的窗口里选择-导入,添加我的.param文件,资源类型是"param",点击确定。
这时项目里 会有个 resource.h 文件,里面有类似这样的代码:
#define IDR_CSV1 101
#define IDR_CSV2 102
这里,101 ,102 就是你添加的资源的id。
资源调用
#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
std::string dllPath = L"PCommServerHandler.dll";
LPCWSTR stringToLPCWSTR(std::string orig)
{
size_t origsize = orig.length() + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
wchar_t* wcstring = (wchar_t*)malloc(sizeof(wchar_t) * (orig.length() - 1));
mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
return wcstring;
}
const char* GetMemParamPtr(const int resourceID)
{
//定位自定义资源,如果是从本模块定位资源,也可将句柄简单地置为NULL即可
// HINSTANCE hInst = NULL;
HINSTANCE hInst = GetModuleHandle(stringToLPCWSTR(dllPath));
char* paramPtr = NULL;
HRSRC hrsrc = FindResource(hInst, MAKEINTRESOURCE(resourceID), TEXT("param"));
if (NULL == hrsrc)
{
std::cout << "Find param resource failed!" << std::endl;
return paramPtr;
}
//获取资源的大小
DWORD dwSize = SizeofResource(hInst, hrsrc);
if (0 == dwSize)
{
std::cout << "Param resource is empty!" << std::endl;
return paramPtr;
}
//加载资源
HGLOBAL hGlobal = LoadResource(hInst, hrsrc);
if (NULL == hGlobal)
{
std::cout << "Load param resource failed!" << std::endl;
return paramPtr;
}
//锁定资源
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
{
std::cout << "Lock param resource failed!" << std::endl;
return paramPtr;
}
paramPtr = (char*)pBuffer;
return (char*)pBuffer;
}
调用
const char* memParamPtr = GetMemParamPtr(101);
ncnn调用
net.load_param_mem(memParamPtr);
参考资料:
1 Visual Studio添加图片资源到exe
2 C++资源文件初使用[C++菜鸟]