代码之家  ›  专栏  ›  技术社区  ›  Nightforce2

VB6转换为C#错误

  •  0
  • Nightforce2  · 技术社区  · 14 年前

    现在我正在将一个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 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    看起来您试图在任何类的作用域之外定义一个方法。

    在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?)
    

    Xiaofu's Christopher Painter's 答案比我的更有价值。

        2
  •  5
  •   Christopher Painter    14 年前

    string ipAddress = "x.x.x.x";
    string hostName = System.Net.Dns.GetHostEntry(ipAddress).HostName;
    
        3
  •  3
  •   Xiaofu    14 年前

    如果你想开始清理代码的话,所有这些都是dantao说的,但是你遗漏了太多的东西,这些东西显然是在VB6项目的其他地方定义的,从而使这个工作保持原样。

    但我认为这可能无法解决根本问题。看起来您正在尝试执行代码的文本端口,而无需重写它以正确使用或利用.NET基类库。

    看一看这个 System.Net.Dns MSDN中的类。

    如果您还没有,我建议您阅读一些关于它的教程或书籍,开始使用C#和.NET。它和VB6有很大的不同,如果你想把它和C#联系起来的话,你会有很糟糕的一天。