Помогите перевести из С# to VB.NET

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

euroflock
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 26.02.2009 (Чт) 12:54

Помогите перевести из С# to VB.NET

Сообщение euroflock » 19.03.2009 (Чт) 12:48

Помогите пожалуйста с "переводом" кода на VB.NET
Особо важные части: 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
Namespace or type specified in the Imports 'SHDocVw' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases, в связи с чем не воспринимается
Код: Выделить всё
IWebBrowser2
с ошибкой Type 'IWebBrowser2' is not defined.

Что не так переведено? Как исправить?
..
свою ошибку ищи сам > добавил к проекту библиотеку shdocvw.dll и всё стало на свои места.
Спасибо всем, кто хотябы посмотрел мой вопрос.

Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

    TopList