VS2013 将导入的资源显示到界面

shaogent 2014-10-14 09:48:27
如题! 补充: 将一个SWF文件导入到资源(IDR_SWF1) 后,现在可以将其保存到本地临时资源,请问除了使用 添加ShockwaveFlash控件来显示当前的 SWF 以外还有其他方式吗?
...全文
258 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-11-17
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2014-10-17
  • 打赏
  • 举报
回复
要求: "/*在导入资源时由于swf格式文件并非VC的标准资源,所以在导入时需要在“Resource type”栏指定资源类型“SWF”,特别需要注意的是在此必须要包含引号。" 你的是 LPTSTR Name = MAKEINTRESOURCE(nResourceID);// IDR_SWF资源名称。???
shaogent 2014-10-17
  • 打赏
  • 举报
回复
返回 1813 错误 说是 文件类型不对 , 插入资源是 “SWF” 类型 资源名称也是“SWF”
schlafenhamster 2014-10-15
  • 打赏
  • 举报
回复
看看 BOOL COscillDlg::AssoilInlaidResource 里 那句 错了?
schlafenhamster 2014-10-14
  • 打赏
  • 举报
回复
BOOL CCliGlobal::AssoilInlaidResource(CString sDllName, UINT nResourceID, CString sOutputFileName, CString sExtendName)
shaogent 2014-10-14
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
http://blog.csdn.net/liur/article/details/324905
就是引用的这个代码 出现的这个错误
shaogent 2014-10-14
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
“ShockwaveFlash控件来显示当前的 SWF 以外还有其他方式吗” 好像 没有
谢谢
ASSERT(!sOutputFileName.IsEmpty());
	ASSERT(!sExtendName.IsEmpty());

	LPTSTR Name = MAKEINTRESOURCE(nResourceID);// IDR_SWF资源名称。

	HINSTANCE hImage = NULL;     // 界面库句柄
	// 载入界面库
	if (!sDllName.IsEmpty())
	{
		hImage = LoadLibrary(sDllName);
		if (hImage < (HINSTANCE)HINSTANCE_ERROR)
		{
			AfxMessageBox(sDllName);
			return FALSE;
		} 
	}  
	HRSRC res = FindResource(hImage, Name, sExtendName);// "swf" 资源类型。

	if (res == NULL)
	{
		DWORD err =  GetLastError();
		 
	 	return FALSE;
	}
	HGLOBAL gl = LoadResource(hImage, res);
	
	if (gl == NULL)  return FALSE;

	LPVOID lp = LockResource(gl);//返回指向资源内存的地址的指针。
	 

	if (sOutputFileName.Find('.') == -1)// 没有找到扩展名
	{
		::MessageBox(NULL, TEXT("必须有扩张名"), TEXT("AssoilInlaidResource"), MB_OK);
		return FALSE;
	}
	 DeleteFile(sOutputFileName);
	// CREATE_ALWAYS为不管文件存不存在都产生新文件。
	// ***CreateFile() 默认使用当前.exe文件路径创建文件。
	// 创建的是一个隐藏属性的文件     FILE_ATTRIBUTE_HIDDEN 

	HANDLE fp = CreateFile(sOutputFileName, GENERIC_WRITE, 0, NULL,
		CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	DWORD a;
	//sizeofResource 得到资源文件的大小
	if (!WriteFile(fp, lp, SizeofResource(hImage, res), &a, NULL))
		return FALSE; 

	CloseHandle(fp);//关闭句柄
	FreeResource(gl);//释放内存
	if (!sDllName.IsEmpty())
	{
		FreeLibrary(hImage);
	}
	return TRUE;
err 为 0x715 0x715|1813】-找不到映像文件中指定的资源类型 if (AssoilInlaidResource(_T("ShockwaveFlashControl.dll"),IDR_SWF2, _T("C:\\Temswf.swf"), _T("swf"))) 请问一下 这个是什么问题
schlafenhamster 2014-10-14
  • 打赏
  • 举报
回复
“ShockwaveFlash控件来显示当前的 SWF 以外还有其他方式吗” 好像 没有
shaogent 2014-10-14
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
BOOL CCliGlobal::AssoilInlaidResource(CString sDllName, UINT nResourceID, CString sOutputFileName, CString sExtendName)

BOOL COscillDlg::AssoilInlaidResource(CString sDllName, UINT nResourceID, CString sOutputFileName, CString sExtendName)
{
	ASSERT(!sOutputFileName.IsEmpty());
	ASSERT(!sExtendName.IsEmpty());

	LPTSTR Name = MAKEINTRESOURCE(nResourceID);// IDR_SWF资源名称。

	HINSTANCE hImage = NULL;     
	// 界面库句柄
	// 载入界面库
	if (!sDllName.IsEmpty())
	{
		hImage = LoadLibrary(sDllName);
		if (hImage < (HINSTANCE)HINSTANCE_ERROR)
		{
			AfxMessageBox(sDllName);
			return FALSE;
		}
	}
	HRSRC res = FindResource(hImage, Name, sExtendName);// "swf" 资源类型。

	if (res == NULL)
	{ 
		AfxMessageBox(SwitchGetErr(GetLastError())); 
		return FALSE;
	}
	HGLOBAL gl = LoadResource(hImage, res);

	if (gl == NULL)  return FALSE;

	LPVOID lp = LockResource(gl);//返回指向资源内存的地址的指针。


	if (sOutputFileName.Find('.') == -1)// 没有找到扩展名
	{
		::MessageBox(NULL, TEXT("扩展名不对"), TEXT("error"), MB_OK);
		return FALSE;
	}
	DeleteFile(sOutputFileName);
	// CREATE_ALWAYS为不管文件存不存在都产生新文件。
	// ***CreateFile() 默认使用当前.exe文件路径创建文件。
	// 创建的是一个隐藏属性的文件     FILE_ATTRIBUTE_HIDDEN 

	HANDLE fp = CreateFile(sOutputFileName, GENERIC_WRITE, 0, NULL,
		CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
	DWORD a;
	//sizeofResource 得到资源文件的大小
	if (!WriteFile(fp, lp, SizeofResource(hImage, res), &a, NULL))
		return FALSE;

	CloseHandle(fp);//关闭句柄
	FreeResource(gl);//释放内存
	if (!sDllName.IsEmpty())
	{
		FreeLibrary(hImage);
	}
	return TRUE;
}









if (AssoilInlaidResource(_T("ShockwaveFlashControl.dll"), IDR_SWF1, _T("C:\\Temswf.swf"), _T("SWF")))
	{
		AfxMessageBox(_T("SUS"));
	}
	else
	{
		AfxMessageBox(_T("文件不存在"));
	}

CString COscillDlg::SwitchGetErr(DWORD n)
{
	CString errStr;
	switch (n)
	{
	case 1813:
		errStr= _T("资源类型不对");
		break;
 
	default:
		break;
	}
	return errStr;
}




这些是全部代码 找不到问题吗

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧