Особо важные части: namespace, interface а также:
- Код: Выделить всё
IntPtr memDC = g.GetHdc();
render.DrawToDC(memDC);
В этой части VB.NET (после перевода) ругается на несоответствие типов и невозможность конвертации System.IntPtr и mshtml._RemotableHandle.
В принципе кое-что понять и перевести удалось, но не всё так гладко, как хотелось бы... Код маленький - помогите плиз.
Вероятно для этого (соответствия) и необходимы части кода namespace и interface, но как их "выразить" в VB.NET не знаю.
- Код: Выделить всё
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using SHDocVw;
using mshtml;
namespace ScreenGrab
{
[
Guid("3050f669-98b5-11cf-bb82-00aa00bdce0b"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown),
ComVisible(true),
ComImport
]
interface IHTMLElementRender
{
void DrawToDC([In] IntPtr hDC);
void SetDocumentPrinter([In, MarshalAs(UnmanagedType.BStr)] string bstrPrinterName, [In] IntPtr hDC);
};
public class IEElementCapture
{
private IWebBrowser2 webBrowser = null;
public IEElementCapture(IWebBrowser2 webBrowser)
{
this.webBrowser = webBrowser;
}
public bool Capture(ref Graphics g)
{
if ( null == webBrowser )
{
return false;
}
IHTMLDocument2 htmlDocument = (IHTMLDocument2) webBrowser.Document;
if ( null != htmlDocument )
{
IHTMLElement bodyElement = (IHTMLElement) htmlDocument.body;
if ( null != bodyElement )
{
IHTMLElementRender render = (IHTMLElementRender) bodyElement;
if ( null != render )
{
IntPtr memDC = g.GetHdc();
render.DrawToDC(memDC);
return true;
}
}
}
return false;
}
}
}
Ну вот, как всегда всё приходится делать самому...
- Код: Выделить всё
Imports System
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports SHDocVw
Imports mshtml
Namespace ScreenGrab
<Guid("3050f669-98b5-11cf-bb82-00aa00bdce0b"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown), ComVisible(True), ComImport()> _
Interface IHTMLElementRender
Sub DrawToDC(<[In]()> ByVal hDC As IntPtr)
Sub SetDocumentPrinter(<[In](), MarshalAs(UnmanagedType.BStr)> ByVal bstrPrinterName As String, <[In]()> ByVal hDC As IntPtr)
End Interface
Public Class IEElementCapture
Private webBrowser As IWebBrowser2 = Nothing
Public Sub New(ByVal webBrowser As IWebBrowser2)
Me.webBrowser = webBrowser
End Sub
Public Function Capture(ByRef g As Graphics) As Boolean
If webBrowser Is Nothing Then
Return False
End If
Dim htmlDocument As IHTMLDocument2 = DirectCast(webBrowser.Document, IHTMLDocument2)
If htmlDocument IsNot Nothing Then
Dim bodyElement As IHTMLElement = DirectCast(htmlDocument.body, IHTMLElement)
If bodyElement IsNot Nothing Then
Dim render As IHTMLElementRender = DirectCast(bodyElement, IHTMLElementRender)
If render IsNot Nothing Then
Dim memDC As IntPtr = g.GetHdc()
render.DrawToDC(memDC)
Return True
End If
End If
End If
Return False
End Function
End Class
End Namespace
Однако теперь выскакивает ошибка:
- Код: Выделить всё
Imports SHDocVw
- Код: Выделить всё
IWebBrowser2
Что не так переведено? Как исправить?
..
свою ошибку ищи сам > добавил к проекту библиотеку shdocvw.dll и всё стало на свои места.
Спасибо всем, кто хотябы посмотрел мой вопрос.