Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Конвертер кода


Автор: Exception 11.1.2006, 00:04
Возникла такая вот идея. Дело в том, что на многих сайтах есть сервис - перевод кода из c# в vb и наоборот. И это часто нужно на форуме. Можно к .NET-коду приделать кнопу "перевод на <здесь другой .NET-язык>". Вопрос в том, может ли пхп отправлять запрос на такой сайт, а потом брать результат и отображать стандартной подсветкой в отдельном окне?

Автор: Exception 11.1.2006, 01:31
Прошу перенести эту тему в форум по .NET, дабы выяснить, нужно ли это. Здесь интереса не наблюдается (

Автор: sergejzr 11.1.2006, 01:40
Можно сделать всё. Я конечно склонялся бы к JS версии, но можно и на php сделать. Идея прикольная.
(если только дашь готовый исходник)
PS: Топ перенесу.

Автор: Exception 11.1.2006, 08:13
Глянь сюда:
http://authors.aspalliance.com/aldotnet/examples/csharptovbtranslator.asmx

Автор: mr.DUDA 11.1.2006, 21:21
Цитата(Exception @ 11.1.2006, 07:13 Найти цитируемый пост)
Глянь сюда:

Протестить веб-метод можно только с локального компа. Можно, конечно, и клиент написать на дотнете smile, вот как приаттаченный внизу.
Добавлено @ 21:23
З.Ы. прикольно, а ведь действительно работает. Reflector у них там на сайте лежит, что ли smile... На VB.NET сроду ни строки кода не писал, а вот же прикольно посмотреть, что получается из шарпа.

Код
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports TranslatorService = ConsoleApplication5.CSharpToVBTranslator.CSharpToVBTranslator

Namespace ConsoleApplication5
    _
   Class Program
      
      'Entry point which delegates to C-style main Private Function
      Public Overloads Shared Sub Main()
         Main(System.Environment.GetCommandLineArgs())
      End Sub
      
      Overloads Shared<STAThread()>  _
      Sub Main(args() As String)
         Dim odlg As New OpenFileDialog()
         odlg.Filter = "C# source files (*.cs)|*.cs"
         odlg.Title = "Выберите файл исходного кода C#"
         If odlg.ShowDialog() = DialogResult.Cancel Then
            Return
         End If
         Dim code As String
         Try
            code = New StreamReader(odlg.FileName).ReadToEnd()
         Catch
         End Try
         Try
            code = New TranslatorService().TranslateCSharpToVB(code)
         Catch ex As Exception
            MessageBox.Show("Не удалось вызвать Web-метод. Причина:" + Environment.NewLine + ex.ToString(), "ошибка")
         End Try
         Dim sdlg As New SaveFileDialog()
         sdlg.Filter = "VB.NET source files (*.vbx)|*.vbx"
         sdlg.Title = "Выберите имя для сохранения файла VB.NET"
         sdlg.AddExtension = True
         If sdlg.ShowDialog() = DialogResult.Cancel Then
            Return
         End If
         Dim writer As New StreamWriter(sdlg.FileName)
         writer.Write(code)
         writer.Flush()
         writer.Close()
      End Sub 'Main
   End Class 'Program
End Namespace 'ConsoleApplication5

Автор: sergejzr 11.1.2006, 21:27
Клиента можно наверняка и на скрипте написать.

Автор: mr.DUDA 11.1.2006, 21:46
Всего-то делов: послать простой SOAP-запрос к веб-сервису. Уверен что в PHP это возможно - через NuSoap или подобные ср-ва, или даже вручную набить шаблон запроса и вставлять в тело запроса параметр (исходник C#).

Автор: Exception 12.1.2006, 03:58
Нее, эт не рефлектор ) это шарпдевелоп так умеет, они из него код брали ) есть супер-вещь, да не на веб-сервисе она... ( вот если бы разрефлектить и повесить на вебматриксе... Вот она: http://vbconversions.com

Автор: mr.DUDA 12.1.2006, 08:51
А можно так сделать: в разделе VB.NET над тэгом {code} добавить ещё кнопочку "c#->vb.net", при нажатии срабатывает javascript, отправляющий на http://authors.aspalliance.com POST-запрос вида:
Цитата
POST /aldotnet/examples/csharptovbtranslator.asmx HTTP/1.1
Host: authors.aspalliance.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://aspalliance.com/aldotnet/webservices/TranslateCSharpToVB"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <TranslateCSharpToVB xmlns="http://aspalliance.com/aldotnet/webservices/">
      <CSharpString>string</CSharpString>
    </TranslateCSharpToVB>
  </soap:Body>
</soap:Envelope>

где string заменяется на исходник, обработанный ф-цией типа strip_tags.

Ответ приходит в виде:
Цитата
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <TranslateCSharpToVBResponse xmlns="http://aspalliance.com/aldotnet/webservices/">
      <TranslateCSharpToVBResult>string</TranslateCSharpToVBResult>
    </TranslateCSharpToVBResponse>
  </soap:Body>
</soap:Envelope>


Берём string из ответа, обрабатываем ф-цией обратной strip_tags и помещаем результат на место кода в {code}. Кажется, ни у кого такого ещё не было.

Автор: Exception 12.1.2006, 15:32
Сергей, реализуешь?

Автор: sergejzr 12.1.2006, 15:36
Цитата(mr.DUDA @ 12.1.2006, 06:51 Найти цитируемый пост)

А можно так сделать: в разделе VB.NET над тэгом {code} добавить ещё кнопочку "c#->vb.net", при нажатии срабатывает javascript, отправляющий на http://authors.aspalliance.com POST-запрос вида:

Ага, это я и имел ввиду.

Цитата(Exception @ 12.1.2006, 13:32 Найти цитируемый пост)

Сергей, реализуешь?

Когда нибудь - да smile Но если кто нибудь меня опередит - буду только рад.

Автор: Areostar 6.6.2008, 17:04
Цитата(Exception @ 11.1.2006,  00:04)
 на многих сайтах есть сервис - перевод кода из c# в vb и наоборот.



    Адрессок не подскажите!? smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)