IStorage
파일에 IPropertySetStorage
을 추가하려고합니다. 작성하려고하는 속성 및 값은 내 디자인에 대한 사용자 정의입니다 (몇 개의 int, 몇 개의 문자열 등을 저장할 수도 있음). 기존의 IStorage
파일 형식을 따르려고하지 않습니다.사용자 지정 구조적 저장소 IPropertySetStorage
API와 관련 문서는 기존 파일 형식을 대상으로합니다. 이것은 관례, 따라서 (지금까지) 내가 찾은 예들은 혼란 스러웠습니다.
질문 (들)
IPropertySetStorage::Create
에 (PARAM 1) 어떻게FMTID
을 통과합니까? 데이터 필드에서 모두 0이 될 수 있습니까? 내가 할 수 있을까?- (매개 변수 2) CLSID는
nullptr
일 수 있습니까? 그렇지 않다면 어떻게해야합니까? 부모IStorage
이 사용한 값을 알아야합니까? - (매개 변수 3) 어떤 propset 플래그가 가장 좋을까요? 나는 문자열을 저장할 것이기 때문에 나는
PROPSETFLAG_DEFAULT
을 사용해야한다고 생각하고있다. - (param 4)
IStorage
핸들이 읽기 용으로 열려 있습니다 (기존 런타임에 대한 플러그인처럼 실행 중입니다). 지금 당장 가장 좋은 방법은STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE
입니다. 하지만STG_E_INVALIDFLAG
주를 받았는데, 나중에 열립니다 나는 아직로서 IStorage
에 새로운 IPropertySetStorage
을 만들 수 없었다, 그러나 나는 성공적으로 사용자 정의 IStream
을 만들었습니다, 그리고 그것을 읽을.
내가하는 일에 더 관련이있는 자습서 링크는 멋지게 평가 될 것입니다.
EDIT 내 코드는 기존 파일에서 작업하면서 기존 응용 프로그램에서 호출됩니다. 내 코드가 호출되면 파일의 루트 IStorage
이 전달됩니다. 다음은 그 코드가 모두 IStorage
인 기본 코드입니다.
rootStg->OpenStorage(name, nullptr, STGM_READ | STGM_SHARE_EXCLUSIVE, nullptr, 0, &spIStg);
spIStg->QueryInterface(IID_IPropertySetStorage, reinterpret_cast<void**>(&pPropSetStg));
pPropSetStg->Create(
::FMTID_UserDefinedProperties,
nullptr,
PROPSETFLAG_DEFAULT,
STGM_CREATE|STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE ,
&pPropStg);
# 4에서 지적했듯이 STG_E_INVALIDFLAG
을 반환합니다. 나는 모든 관련 코드를 붙여되면서
전체 코드를 붙여주세요. 내 코드가 스 니펫과 잘 작동합니다. – Xearinox
@ Xearinox 모든 관련 코드를 붙여 넣을 때 RW (작성시 RW가 아니라 이미있는 경우)가 아닌 READ 모드에서 저장소를 열어 놓고 있음을 확인했습니다. . 이로 인해 prop 세트가 작성되지 못했습니다. 어리석은 것처럼 보일 수도 있지만,이 세부 정보를 답으로 게시하면 (FW 모드에서 자신의 창고를 열어야합니다), 내가 찾은 정보를 요청한 것이므로 크레딧을주고 싶습니다. . 또한, 필자는 원래의 질문에 자세히 나와있는 것처럼 매개 변수에 관한 더 많은 정보를 고맙게 생각합니다. 고맙습니다. – payo
Tommorow 나는 약간 연구를한다. 나는 결과를 줄 것이다. :-) – Xearinox