- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过 IMAPI2 创建光盘镜像。代码非常简单:
#include <windows.h>
#include <iostream>
#include <fstream>
#include <shlwapi.h>
#include <cstdio>
#include <imapi.h>
#include <imapi2.h>
#include <imapi2fs.h>
#include <imapierror.h>
#include <imapi2error.h>
#include <imapi2fserror.h>
using namespace std;
int main() {
CoInitialize(NULL);
HRESULT res = 0;
IFileSystemImage* image = NULL;
IFileSystemImageResult* result = NULL;
IFsiDirectoryItem* root = NULL;
IStream* file = NULL;
IStream* r_i = NULL;
res = CoCreateInstance(CLSID_MsftFileSystemImage, NULL, CLSCTX_ALL, __uuidof(IFileSystemImage), (void**) &image);
printf("1 %08X\n", res);
res = image -> put_FileSystemsToCreate((FsiFileSystems)(FsiFileSystemJoliet | FsiFileSystemISO9660));
printf("2 %08X\n", res);
res = image -> put_VolumeName(L"Pictures");
printf("3 %08X\n", res);
res = image -> ChooseImageDefaultsForMediaType(IMAPI_MEDIA_TYPE_CDRW);
printf("4 %08X\n", res);
res = image -> get_Root(&root);
printf("5 %08X\n", res);
res = root -> AddTree(L"C:\\pictures", VARIANT_TRUE);
printf("6 %08X\n", res);
res = SHCreateStreamOnFileEx(L"C:\\main.cpp", STGM_READ | STGM_SHARE_DENY_NONE | STGM_DELETEONRELEASE, FILE_ATTRIBUTE_NORMAL, false, NULL, &file);
printf("7 %08X\n", res);
res = root -> AddFile(L"main.cpp", file);
printf("8 %08X\n", res);
res = image -> CreateResultImage(&result);
printf("9 %08X\n", res);
res = result -> get_ImageStream(&r_i);
printf("0 %08X\n", res);
STATSTG stg;
r_i -> Stat(&stg, 1);
char* data = new char[stg.cbSize.QuadPart];
ULONG junk;
r_i -> Read(data, stg.cbSize.QuadPart, &junk);
FILE* f = fopen("image.iso", "wb");
fwrite(data, stg.cbSize.QuadPart, 1, f);
fclose(f);
delete data;
r_i -> Release();
file -> Release();
root -> Release();
result -> Release();
image -> Release();
CoUninitialize();
printf("Completed.\n");
scanf("%d", &junk);
}
命令 6 和 8 失败,返回 0xC0AAB101(无效参数)。这在 Win XP SP3 和 Win 7 Pro SP1 x32 上都会发生。其余的工作正常,我得到一个空图像。我错过了什么?(附:以上代码的灵感来自于一个开源应用程序。它开箱即用,但有时当我在我的机器上重建它时开始失败。)
最佳答案
->AddTree(和大多数 COM 对象方法)需要一个 BSTR 字符串,您可以创建该字符串并需要将其释放以防止内存泄漏。你可以使用诸如...
// allocate a bstr string
BSTR bstrPictures = SysAllocString(L"C:\\Pictures");
// use it
res = root -> AddTree(bstrPictures, VARIANT_TRUE);
printf("6 %08X\n", res);
// free the bstr string
SysFreeString(bstrPictures);
虽然 BSTR 可以用来代替“宽字符字符串”,但反之并不总是正确的。 BSTR 在实际字符数据之前有额外的数据,因此需要函数来操作它们。
尽量不要养成像这样使用它们的坏习惯......
res = root -> AddTree(SysAllocString(L"C:\\Pictures"), VARIANT_TRUE);
因为你会有内存泄漏。
玩得开心。
关于c++ - IMAPI2 : adding files and folders fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21967107/
来自 get_MediaHeuristicallyBlank 的 MSDN 文档和 get_MediaPhysicallyBlank ,目前尚不清楚这两者之间的确切区别是什么。谁能解释一下这两者有何不
由于我最初的问题有点太模糊,让我澄清一下。 我的目标是: 通过 IMAPI 选择文件系统后估计空白磁盘大小 估计如果我刻录我的文件将占用这张光盘的空间。 我想知道的: 是否可以通过编程方式为所选文件系
我很确定 IMAPI 在通用 Windows 平台中没有重复(这似乎有点疏忽)但我需要将音频文件写入 CD-ROM 驱动器。 这可能吗?我在哪里可以找到文档? 最佳答案 遗憾的是,目前没有可在 UWP
我是一名优秀的程序员,十分优秀!