minermadison
asked on
Having trouble loading content in to a MSHTML.Document from a windows form.
I have three .net projects, an ASP.net web app, a Class Library and a Windows Form app. Both the Windows app and the ASP.net app reference the class library. However the class library is behaving differently depending on which application is calling it.
The class library (.dll) contains a function called LoadHtmlIntoDoc. This function accepts a string and loads it in to a MSHTML.HTMLDocumentClass, the HTMLDocumentClass is then used for parsing (it is never used in a UI).
I have a couple versions of the function, both version of the function are shown below (although abbreviated for simplicity....)
Initially this library was developed for use with an ASP.net web application, and BOTH functions below work great when they are called from the ASP.net application. However when the same exact functions are called from the Windows Form application neither of them work. The ASP.net app and the Windows app both link to the same exact .dll, and the augment passed to the functions is identical in both cases; but I'm getting very different results.
When Version 1 of the function is called from the Windows Form it runs, but just an empty document is loaded, So that no matter what I pass to the LoadHtmlIntoDoc function, the following is always true after the function runs :
Doc.documentElement.outerH TML = "<HTML><HEAD></HEAD><BODY> <P> < /P></BODY> </HTML>"
When Version 2 of the function is called from the Windows Form iDoc2.readyState is "loading" forever, causing an infinite loop/lockup...
I have no clue why this .dll would behave differently depending on which type of application is linking to it. I really need this library to function correctly when it is called from a Windows application AND an ASP.net application.
Here is the function I'm using : (two versions of the same function, both work when called from ASP.net, neither work when called from the Windows app.)
Any help if VERY much appreciated!!
The class library (.dll) contains a function called LoadHtmlIntoDoc. This function accepts a string and loads it in to a MSHTML.HTMLDocumentClass, the HTMLDocumentClass is then used for parsing (it is never used in a UI).
I have a couple versions of the function, both version of the function are shown below (although abbreviated for simplicity....)
Initially this library was developed for use with an ASP.net web application, and BOTH functions below work great when they are called from the ASP.net application. However when the same exact functions are called from the Windows Form application neither of them work. The ASP.net app and the Windows app both link to the same exact .dll, and the augment passed to the functions is identical in both cases; but I'm getting very different results.
When Version 1 of the function is called from the Windows Form it runs, but just an empty document is loaded, So that no matter what I pass to the LoadHtmlIntoDoc function, the following is always true after the function runs :
Doc.documentElement.outerH
When Version 2 of the function is called from the Windows Form iDoc2.readyState is "loading" forever, causing an infinite loop/lockup...
I have no clue why this .dll would behave differently depending on which type of application is linking to it. I really need this library to function correctly when it is called from a Windows application AND an ASP.net application.
Here is the function I'm using : (two versions of the same function, both work when called from ASP.net, neither work when called from the Windows app.)
Any help if VERY much appreciated!!
'Version 1:
Public Function HTMLDocumentClass(ByVal strHTML as string) As Boolean
Dim hr As Integer = WinApis.CreateStreamOnHGlobal _
(Marshal.StringToHGlobalAuto(strHTML), True, stream)
If (hr <> Hresults.S_OK) OrElse (stream Is Nothing) Then
Return false
End If
Doc = New HTMLDocumentClass()
persistentStreamInit = TryCast(Doc, IPersistStreamInit)
If persistentStreamInit IsNot Nothing Then
persistentStreamInit.InitNew()
persistentStreamInit.Load(stream)
persistentStreamInit = Nothing
ret = True
End If
stream = Nothing
Return True
End Function
'Version 2:
Public Function HTMLDocumentClass(ByVal strHTML as string) As Boolean
Dim Doc As IHTMLDocument2
Doc.clear()
Doc.write(strHTML)
Doc.close()
While (Doc.readyState <> "complete" And _
iDoc2.readyState <> "interactive")
System.Threading.Thread.Sleep(0)
System.Threading.Thread.Sleep(100)
System.Threading.Thread.Sleep(0)
End While
Return True
End Function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.