BUG: Using Scriptlet Control in MFC App causes assertion
ID: Q190838
|
The information in this article applies to:
-
Microsoft Internet Explorer (Programming) versions 4.0, 4.01, 4.01 SP1, 5.0
SYMPTOMS
When using the Microsoft Scriptlet Component in a Visual C++ MFC SDI
application, calling the CWebBridge::Create method causes an assertion in
Occsite.cpp at line 1475.
RESOLUTION
If you want to use the Scriptlet Componenet in Visual C++ applications, you
must automate the component. Please see the MORE INFORMATION section for an
example of how to do this.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article.
MORE INFORMATIONSteps to Reproduce Behavior
- Create a new MFC SDI application using AppWizard.
- Add the Microsoft Scriptlet Component to your Project from the Project |
Add to Project | Components and Controls menu. Choose "Microsoft
Scriptlet Component" from the "Registered ActiveX Controls" folder.
This will insert a class named CWebBridge.
- Include WebBridge.h into your view class header file with the following
line:
#include "WebBridge.h"
- Declare an instance of CWebBridge in your view class like this:
CWebBridge m_webBridge;
- In the implementation of your view class's OnInitialUpdate, create the
component like this:
CRect rc;
m_webBridge.Create(NULL, WS_VISIBLE|WS_CHILD, rc, this,
IDC_WEBBRIDGE);
When you run your application you will receive the assertion described in
the SUMMARY section of this article.
Workaround
In order to work around this problem, you can use the #import command to
create smart pointer classes for the Microsoft Scriptlet Component. Then
you can use this component as you normally would. The following are the
steps to follow in order to implement this solution in your code:
- Import the Microsoft Scriptlet Component in-proc server DLL into your
project by placing the following code in the header file for your view
class or in stdafx.h:
#import <mshtmlwb.dll> // This DLL should be in your system dir
using namespace WBLib;
#include <comdef.h> // Needed for Compiler COM support
- Declare an instance of IWebBridgePtr in your view class. IWebBridgePtr
is a smart pointer for the IWebBridge interface:
IWebBridgePtr m_webBridge;
- Initialize COM using CoInitialize. You may want to do this in the
constructor for your view class or in OnInitialUpdate:
CoInitialize(NULL);
- Create and instance of the Scriptlet Component in OnInitialUpdate.
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// Create an instance of the Scriptlet Component.
// Here, I am asking for a pointer to the IWebBridge interface.
// You could ask for IWBScriptControl or query for it later.
HRESULT hr = CoCreateInstance(_uuidof(Scriptlet), NULL,
CLSCTX_INPROC_SERVER,
_uuidof(IWebBridge),
(void**)&m_webBridge);
if (SUCCEEDED(hr))
{
// Insert some code here
}
}
- Use the Scriptlet Component like normal. For example, if you want to
find out if scrollbars are on or off, you would use this code:
BOOL bScrollbar;
bScrollbar = m_webBridge->GetScrollbar();
TRACE("Scrollbar is %s\n", bScrollbar ? "on" : "off");
REFERENCESFor more information, please see the MSDN Web Workshop:
http://msdn.microsoft.com/workshop/default.asp
Search on "Dynamic HTML Scriptlets."
© Microsoft Corporation 1998, All Rights Reserved. Contributions by Scott Roberts, Microsoft Corporation
Additional query words:
Keywords : kbCtrl kbIE400bug kbIE401bug kbScript kbIE401sp1bug kbIE500bug
Version :
Platform :
Issue type : kbbug
|