VBと言うよりVCの質問になりますが、VBで作ったOCXはVCでは使えないのでしょうか?逆は使えるという記述は良く見かけるのですが…
具体的には、VBでファイルマッピングを扱うOCXを作成したのですが、それをVCで使おうとするとコンパイルは通るのですが以下のエラーが出てしまいます。
Program: XXX
File: winocc.cpp
Line:345
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
このエラーに付いて調べた結果、SP6を当てれば解決するとの事でしたが…解決してくれません。
ちなみに、このwinocc.cppの345行目と言うのは…
void AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, ...)
{
ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least) //ここが345行目
if (m_pCtrlSite == NULL)
return;
va_list argList;
va_start(argList, pbParamInfo);
m_pCtrlSite->InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo,
argList);
va_end(argList);
}
だそうです。このInvokeHelperというのはコントロールに命令を送って実行させる関数ですよね?ここの引数が間違えていると言う事になるのでしょうか?しかし、これの呼び出し元は自動生成なので…そうなるとVB側の問題になるのでしょうか?
具体的には、VBで言うTimerのようなOCXで、メソッドしかありません。
そのメソッドをテスト用のVCで作ったダイアログで呼び出すと上記のエラーが出るわけです。
さらに調べた結果、どうもCWndクラス内でコントロールのポインタのような物がNULLになっているのが原因のような気がするのですが、そこに値をいれる関数が見つかりません。
VCで同じような動きをするOCXを作ってみた所、まったく同じエラーが出たので根本的にメソッドの使い方が間違えているのかと疑い始めたのですが…
で、肝心な事を書き忘れていたわけですが、VB6.0&VC6.0でOSはXPです。
ひとまず原因は分かりました…が、解決はしていませんorz
もっと初歩的なところに問題がありまして、別スレを立てさせていただきますのでひとまずこちらは解決と言う事で。
ツイート | ![]() |