お世話になっています、たいちうです。
開発環境ではデバッグモード、リリースモードともに問題なく動いていたものが、
VCのインストールされていない環境で不具合が出てしまっています。
SDIのCViewは、メンバ変数にCMSFlexGridを持ち、
CView::OnInitialUpdate()関数で、Createしています。
テスト用のVCのインストールされていない環境では、Createで戻り値が0になり、
GetLastError()は6(オーバーフロー)、グリッドの表示はされません。
今、原因を調査中ですが、同様の経験をされた方、心当たり、アドバイスのある方、
いらっしゃいましたら、お聞かせください。
--以下、より詳細な状況です。--
【開発側】
WIN2000+SP3 VC6.0+SP5
【テスト側】
WIN2000+SP3 VCのインストールはなし
【アプリケーションの作成手順】
1.MFCウィザードでSDIを選択し、デフォルトで作成。
2.プロジェクトに追加で、MSFlexGridを追加。
3.CViewにメンバ変数CMSFlexGrid m_gridを追加。
4.CView::OnInitialUpdate()で、
m_grid.Create(", WS_CHILD | WS_VISIBLE, r, this, 1);
【実行結果】
・開発側ではデバッグモード、リリースモードともにグリッドが表示される。
・テスト側でリリースモードのexeを実行すると、グリッドが表示されない。
m_grid.Createの戻り値は0であり、GetLastErrorは6(オーバーフロー)。
【その他】
CViewでなくCFormViewを使い、作成時にグリッドを貼り付けると
テスト側でも表示されます。
ただ、実際に動かしたいアプリケーションでこの方法に変更するのは、
修正箇所が多いので、できればCViewで動的にCreateする方法のままで
解決したいです。
関係あるかはわからんが、以下のようなマイクロソフトのサポート技術情報
があります。
[PRB] 動的に作成したコントロールでメッセージが受信されない
文章番号 156051
ボコノン教徒様
回答有難うございます。
私のケースの場合には、CWnd::CreateからCreateControlを呼び出し、
それが失敗しているようなので、完全に同じ現象ではないようです。
ですが、ActiveXを動的に作成する手順が、どこか間違っているのだと
思いますので、一度基本から見直してみます。