Hi,
Several fixes for the iupwin_webbrowser.cpp
--- \dll\iup\a\srcweb\iupwin_webbrowser.cpp Wed Apr 03 14:12:26 2019
+++ iupwin_webbrowser.cpp Mon Jun 03 23:00:50 2019
@@ -206,12 +206,14 @@
pweb->get_Document(&lpDispatch);
if (!lpDispatch)
{
+ const BSTR pBstr = SysAllocString("about:blank");
iupAttribSet(ih, "_IUPWEB_FAILED", NULL);
- pweb->Navigate(L"about:blank", NULL, NULL, NULL, NULL);
+ pweb->Navigate(pBstr, NULL, NULL, NULL, NULL);
IupFlush();
pweb->get_Document(&lpDispatch);
+ SysFreeString(pBstr);
}
IPersistStreamInit* pPersistStreamInit = NULL;
@@ -405,15 +407,15 @@
{
if (value)
{
- char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+ const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
if (element_id)
{
- IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
+ const IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
if (pElem)
{
- WCHAR* wvalue = iupwinStrChar2Wide(value);
- pElem->put_innerText(wvalue);
- free(wvalue);
+ const BSTR pBvalue = SysAllocString(szWCharString);
+ pElem->put_innerText(pBvalue);
+ SysFreeString(pBvalue);
pElem->Release();
}
}
@@ -423,50 +425,49 @@
static char* winWebBrowserGetInnerTextAttrib(Ihandle* ih)
{
- char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+ const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+ const* value = NULL;
if (element_id)
{
- IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
+ const IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
if (pElem)
{
- WCHAR* wvalue = NULL;
- if (!FAILED(pElem->get_innerText(&wvalue)))
+ BSTR pBvalue = NULL;
+ if (!FAILED(pElem->get_innerText(&pBvalue)))
{
- char* str = iupwinStrWide2Char(wvalue);
- char* value = iupStrReturnStr(str);
- SysFreeString(wvalue);
+ const char* str = iupwinStrWide2Char(pBvalue);
+ const char* value = iupStrReturnStr(str);
free(str);
- pElem->Release();
- return value;
+ SysFreeString(pBvalue);
}
pElem->Release();
}
}
- return NULL;
+ return value;
}
static int winWebBrowserSetAttributeAttrib(Ihandle* ih, const char* value)
{
if (value)
{
- char* element_id = iupAttribGet(ih, "ELEMENT_ID");
- char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
+ const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+ const char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
if (element_id && attribute_name)
{
IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
if (pElem)
{
- WCHAR* wname = iupwinStrChar2Wide(attribute_name);
- WCHAR* wvalue = iupwinStrChar2Wide(value);
+ const BSTR pBname = SysAllocString(attribute_name);
+ const WCHAR* wvalue = iupwinStrChar2Wide(value);
VARIANT var;
VariantBStr(&var, wvalue);
- pElem->setAttribute(wname, var, 1); // case sensitive search
+ pElem->setAttribute(pBname, var, 1); // case sensitive search
free(wvalue);
- free(wname);
+ SysFreeString(pBname);
pElem->Release();
}
}
@@ -476,31 +477,29 @@
static char* winWebBrowserGetAttributeAttrib(Ihandle* ih)
{
- char* element_id = iupAttribGet(ih, "ELEMENT_ID");
- char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
+ const char* element_id = iupAttribGet(ih, "ELEMENT_ID");
+ const char* attribute_name = iupAttribGet(ih, "ATTRIBUTE_NAME");
+ const char *value = NULL;
if (element_id && attribute_name)
{
- IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
+ const IHTMLElement* pElem = winWebBrowserFindElement(ih, element_id);
if (pElem)
{
- WCHAR* wname = iupwinStrChar2Wide(attribute_name);
+ const BSTR pBname = SysAllocString(attribute_name);
VARIANT var;
VariantInit(&var);
- if (!FAILED(pElem->getAttribute(wname, 1, &var)) && var.bstrVal) //
case sensitive search
+ if (!FAILED(pElem->getAttribute(pBname, 1, &var)) && var.bstrVal) //
case sensitive search
{
- char* str = iupwinStrWide2Char(var.bstrVal);
- char* value = iupStrReturnStr(str);
+ const char* str = iupwinStrWide2Char(var.bstrVal);
+ value = iupStrReturnStr(str);
free(str);
- free(wname);
- pElem->Release();
- return value;
}
- free(wname);
+ SysFreeString(pBname);
pElem->Release();
}
}
- return NULL;
+ return value;
}
static int winWebBrowserSetBackForwardAttrib(Ihandle* ih, const char* value)
@@ -578,7 +577,7 @@
if (value)
{
IWebBrowser2 *pweb = (IWebBrowser2*)iupAttribGet(ih, "_IUPWEB_BROWSER");
- WCHAR* wvalue = iupwinStrChar2Wide(value);
+ const BSTR pBvalue = SysAllocString(value);
VARIANT var;
VariantInit(&var); /* Initialize our variant */
@@ -587,8 +586,8 @@
iupAttribSet(ih, "_IUPWEB_FAILED", NULL);
- pweb->Navigate(wvalue, NULL, &var, NULL, NULL);
- free(wvalue);
+ pweb->Navigate(pBvalue, NULL, &var, NULL, NULL);
+ SysFreeString(pBvalue);
}
return 0;
}
@@ -599,10 +598,10 @@
BSTR pbstrLocationURL = NULL;
if (pweb->get_LocationURL(&pbstrLocationURL)==S_OK && pbstrLocationURL)
{
- char* str = iupwinStrWide2Char(pbstrLocationURL);
- SysFreeString(pbstrLocationURL);
+ const char* str = iupwinStrWide2Char(pbstrLocationURL);
char* value = iupStrReturnStr(str);
free(str);
+ SysFreeString(pbstrLocationURL);
return value;
}
return NULL;Best regards, Ranier Vilela
iupwin_webbrowser.cpp.patch
Description: iupwin_webbrowser.cpp.patch
_______________________________________________ Iup-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/iup-users
