VB6 Ошибка преобразования в C # - PullRequest
0 голосов
/ 22 августа 2010

Прямо сейчас я портирую проект VB6 на C # и продолжаю получать эту ошибку. Не могу исправить это в пространстве имен.

Проблема:

//Expected class, delegate, enum, interface, or struct
public string GetHostByAddress(long addr)
{
    dynamic phe = null;
    dynamic Ret = null;
    HOSTENT heDestHost = default(HOSTENT);
    dynamic hostname = null;

    phe = gethostbyaddr(addr, 4, PF_INET);
    if (phe) {
        MemCopy(heDestHost, phe, hostent_size);
        hostname == new String[256, 0];
        MemCopy(hostname, heDestHost.h_name, 256);
        GetHostByAddress == Strings.Left(hostname, Strings.InStr(hostname, Strings.Chr(0)) - 1);
    } else {
        GetHostByAddress = WSA_NoName;
    }
}

Оригинальный метод выглядит следующим образом.

Public Function GetHostByAddress(ByVal addr As Long) As String

  Dim phe&, Ret&
  Dim heDestHost As HOSTENT
  Dim hostname&

    phe = gethostbyaddr(addr, 4, PF_INET)
    If phe Then
        MemCopy heDestHost, ByVal phe, hostent_size
        hostname = String$(256, 0)
        MemCopy ByVal hostname, ByVal heDestHost.h_name, 256
        GetHostByAddress = Left$(hostname, InStr(hostname, Chr$(0)) - 1)
      Else
        GetHostByAddress = WSA_NoName
    End If

End Function

Неспособность понять, почему это не работает и расстраивается. Есть предложения?

Ответы [ 3 ]

5 голосов
/ 22 августа 2010

Вы заново изобретаете колесо. Попробуйте:

string ipAddress = "x.x.x.x";
string hostName = System.Net.Dns.GetHostEntry(ipAddress).HostName;
3 голосов
/ 22 августа 2010

Все, что сказал Дэн Тао, если вы хотите начать очистку кода, но вам не хватает слишком много вещей, которые были явно определены в другом месте в вашем проекте VB6, чтобы заставить это работать как есть.

Но я думаю, что это может не решить основную проблему здесь. Похоже, вы пытаетесь выполнить буквальный перенос кода, не переписывая его для правильной работы или использования библиотек базовых классов .NET.

Взгляните на класс System.Net.Dns в MSDN.

Если вы еще этого не сделали, я бы посоветовал прочитать некоторые учебные пособия или книги по нему, чтобы начать работу на C # и .NET. Он сильно отличается от VB6, и у вас просто будет плохой день, пытаясь связать его с C #.

2 голосов
/ 22 августа 2010

Похоже, вы пытаетесь определить метод вне области любого класса.

В C #, а также в VB.NET все методы должны принадлежать классу. Заключите ваш код в какой-нибудь произвольный вспомогательный класс, чтобы устранить ошибку компилятора:

public static class MyHelperClass
{
    // put your method definition here
}

Возможно, после этого у вас все еще будут некоторые ошибки, судя по всему. Например, я не думаю, что эта строка делает то, что вы думаете:

hostname == String[256, 0];

Может быть, вы хотите, чтобы он сделал что-то подобное?

hostname = new string[256, 0]; // Note: one '=' symbol, 'new' keyword
                               // (Is allocation of a multidimensional array
                               // of strings what you want?)

Это очень поверхностные наблюдения, основанные исключительно на деталях вашего кода. Для более полезных комментариев по более фундаментальному вопросу о том, чего вы пытаетесь достичь здесь, я призываю вас рассматривать и ответов Кристофера Пейнтера Сяофу как более ценные, чем мои.

...