ncnn之十:将ncnn的param作为资源文件的调用

本文介绍了如何在Visual Studio中将NCNN模型的.param文件作为资源添加到项目中,并通过C++代码进行调用。首先,通过右键添加资源并设置资源类型为'param'。然后,在代码中利用GetModuleHandle和FindResource等函数来定位和加载资源,最后通过net.load_param_mem()在ncnn中加载内存中的模型参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将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++菜鸟]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingo_敏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值