কাস্টম স্ট্রাকচার্ড স্টোরেজ আইপিপ্রস্থসেট স্টোরেজ

আমি একটি যোগ করার চেষ্টা করছি IPropertySetStorage একটি বিদ্যমান আইএসটোজার ফাইল। বৈশিষ্ট্য এবং তাদের মান আমি লিখতে পরিকল্পনা আমার নকশা (আমি কয়েক ints, কয়েক স্ট্রিং, ইত্যাদি সংরক্ষণ করতে পারে) কাস্টম হবে। আমি কোনও বিদ্যমান IStorage ফাইল প্রকারের সাথে সামঞ্জস্য করার চেষ্টা করছি না।

এপিআই এবং তার ডকুমেন্টেশন বিদ্যমান ফাইল ফরম্যাটে লক্ষ্যবস্তু মনে। এই প্রথাগত, এবং এইভাবে (এতদূর) আমি পাওয়া যায় উদাহরণ শুধুমাত্র বিভ্রান্তিকর হয়েছে।

প্রশ্ন (গুলি)

On IPropertySetStorage::Create

  1. (param 1) What FMTID do I pass? Can it be all zeros on the data fields? Can I just make it up?
  2. (param 2) Can CLSID be a nullptr? If not, what should it be? Do I need to figure out what values the parent IStorage used?
  3. (param 3) What propset flag would be best? I'm thinking because I'll be storing string, I should use PROPSETFLAG_DEFAULT.
  4. (param 4) The IStorage handle is open for read (I'm running like a plugin to an existing runtime). My best guess right now is to use STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE. But I've been getting STG_E_INVALIDFLAG

নোট করুন, আমি এখনো IStorage এ নতুন IPropertySetStorage তৈরি করতে সক্ষম নই, কিন্তু আমি সফলভাবে একটি কাস্টম IStream তৈরি করেছি এবং পরে এটি থেকে পড়তে হবে।

আমি কি করছি তা প্রাসঙ্গিক আরো প্রাসঙ্গিক টিউটোরিয়াল কোন লিঙ্ক চমত্কারভাবে প্রশংসা করা হবে।

EDIT Note that my code is called from an existing application, working on existing files. When my code is called, I am passed the file's root IStorage. Here is all of my code with that IStorage base.

rootStg->OpenStorage(name, nullptr, STGM_READ | STGM_SHARE_EXCLUSIVE, nullptr, 0, &spIStg);
spIStg->QueryInterface(IID_IPropertySetStorage, reinterpret_cast(&pPropSetStg));    

pPropSetStg->Create(
  ::FMTID_UserDefinedProperties, 
  nullptr, 
  PROPSETFLAG_DEFAULT, 
  STGM_CREATE|STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE , 
  &pPropStg);

যেহেতু আমি # 4 এ ইঙ্গিত করেছি, ফিরে আসে) <�কোড> STG_E_INVALIDFLAG এ

1
যোগ সম্পাদিত
মতামত: 1
@ এক্সিক্যানক্স হিসাবে আমি সব প্রাসঙ্গিক কোড আটকানো ছিল, আমি লক্ষ্য করেছি যে আমি রিড মোডে আমার স্টোরেজ খোলার (আমি প্রথমে আমার পার্টিশন সংরক্ষণের জন্য একটি শিশু সঞ্চয়স্থান তৈরি করছি) RW (RW তৈরি না, কিন্তু এটি ইতিমধ্যেই আছে না)। এর ফলে প্রোপের সেটটি ব্যর্থ হওয়ার জন্য সৃষ্টি হয়েছে। এটা মূর্খ মনে হতে পারে, কিন্তু যদি আপনি একটি উত্তর (এফডব্লু মোড আপনার নিজস্ব স্টোরেজ খুলতে ভুলবেন না) হিসাবে এই বিস্তারিত পোস্ট, আমি আপনাকে ক্রেডিট দিতে চান, এটি আরো তথ্য জন্য আপনার অনুরোধ ছিল যে এটি এটি খুঁজে পেতে সাহায্য করেছে । নোট, এছাড়াও, আমি এখনও আমার মূল প্রশ্নের বিস্তারিত হিসাবে আমি প্যারামিটার সংক্রান্ত আ
যোগ লেখক payo, উৎস
পূর্ণ কোড পেস্ট করুন। আমার কোড আপনার স্নিপেট সঙ্গে জরিমানা কাজ করে।
যোগ লেখক Xearinox, উৎস
টমোরো আমি কিছু গবেষণা করি। আমি আপনাকে ফলাফল দিতে হবে। :-)
যোগ লেখক Xearinox, উৎস

1 উত্তর

(Xierinox এর বিশেষ ধন্যবাদ)

আমি সব প্রাসঙ্গিক কোড আটকানোর সময়, আমি লক্ষ্য করেছি যে আমি রিড মোডে আমার স্টোরেজ (আমি প্রথমে আমার অংশগুলি সংরক্ষণের জন্য একটি শিশু সঞ্চয়স্থান তৈরি করছি) তৈরি করছি না, আরডব্লিউ (আরডব্লিউ তৈরির সময় নয়, যখন এটি ইতিমধ্যেই আছে)। এর ফলে প্রোপের সেটটি ব্যর্থ হওয়ার জন্য সৃষ্টি হয়েছে।

// see STGM_READWRITE (fix)
rootStg->OpenStorage(name, nullptr, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, nullptr, 0, &spIStg);
spIStg->QueryInterface(IID_IPropertySetStorage, reinterpret_cast(&pPropSetStg));    

pPropSetStg->Create(
  ::FMTID_UserDefinedProperties, 
  nullptr, 
  PROPSETFLAG_DEFAULT, 
  STGM_CREATE|STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE , 
  &pPropStg);
0
যোগ