VC++で ActiveXコンポーネント(OCX)を作成したのですが、
VBの貼り付け、ファイル保存した際にプロパティ情報量が膨大なため?
VBが落ちてしまいました。
何かよい回避策はないでしょうか?
プロパティ情報はテキストファイルに書き込むようになっているのですが、
バイナリファイルに書き込めば大丈夫なのでしょうか?
プロパティをバイナリファイルに書き込み方法ご存知の方がいれば教えて下さい。
http://www.hyuki.com/writing/techask.html
>プロパティ情報量が膨大なため?
どのくらいでしょう?
>プロパティ情報はテキストファイルに書き込むようになっているのですが、
これはActiveX側で永続性のサポートはしておらず
ActiveXでSet〜などのプロパティ設定(VC側)のところでファイルに保存している
ということでよろしいでしょうか?
かなり推測が入っていますが
VC側からVBのEXEを起動してデバッグしたほうが早そうな気が。
すみません。分かりにくい質問の仕方で申し訳ありません。
>ActiveXでSet〜などのプロパティ設定(VC側)のところでファイルに保存している
>ということでよろしいでしょうか?
その通りです。
テキストファイル(.frm)と記述しましたが、
バイナリのファイル(.frx)に書き込んでいるようでした。。。
しかし、その書き込み情報量が多くなると落ちてしまいます。
落ちている箇所も、CPropbagPropExchangeクラスのExchangePropメソッド内の
LPPROPERTYBAGのWriteメソッドと呼んでプロパティを書き込んでところでした。
1プロパティに書き込む情報量には制限があるのでしょうか?
初心者なのでいろいろ分からないことばかりですみません。。。
http://dpi.ufv.br/downloads/C++IntroductoryEdition/VCB600ENU1/VC98/MFC/SRC/CTLPBAG.CPP
VC側はこんな感じのソースとの認識でよいでしょうか?(クラス名で検索しただけ)
BOOL CPropbagPropExchange::ExchangeProp(LPCTSTR pszPropName,
VARTYPE vtProp,void* pvProp, const void* pvDefault)
{
のwriteのあたり。
#上記と似ているならセットしている型とか情報のサイズなどが不明だと
#なんともいえません。全然違っているなら何にも言えませんが。。
#板が違ってきてるかも。。すみません。
マイクロソフトに問い合わせたところ、
1プロパティに書き込む情報量は不明とこことです。
制限はあるのだと思うのですが、今後バージョンアップ等で変更される可能性もあるので、
現状の情報量の制限が今後も保証されるとは限らないとのことでした。
解決になっていないのですが、もう少しプロパティを分割するなどして
とりあえずは対応しようと思います。
お騒がせしました。
ありがとうございました。
解決にするの忘れていました。。。
ツイート | ![]() |