15,979
社区成员
发帖
与我相关
我的任务
分享
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")))
请问一下 这个是什么问题
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;
}
这些是全部代码 找不到问题吗