0

现在我正在将一个 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

无法理解为什么它不起作用并感到沮丧。有什么建议么?

4

3 回答 3

5

你正在重新发明轮子。尝试:

string ipAddress = "x.x.x.x";
string hostName = System.Net.Dns.GetHostEntry(ipAddress).HostName;
于 2010-08-22T04:53:03.067 回答
3

如果您想开始清理代码,那么 Dan Tao 所说的所有内容,但是您错过了太多显然在 VB6 项目中其他地方定义的内容,无法使其按原样工作。

但我认为这可能无法解决这里的根本问题。看起来您正试图在不重写代码的情况下对代码进行文字端口,以使其正常工作或利用 .NET 基类库。

看看 MSDN 中的System.Net.Dns类。

如果您还没有,我建议您阅读一些关于它的教程或书籍,以开始使用 C# 和 .NET。它与 VB6 完全不同,如果你试图将它与 C# 联系起来,你会遇到糟糕的一天。

于 2010-08-22T04:34:18.750 回答
2

看起来您正在尝试定义任何类范围之外的方法。

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

这些只是纯粹基于代码细节的非常肤浅的观察。对于您在这里尝试实现的更基本问题的更有用的评论,我敦促您将小福和克里斯托弗·画家的答案视为比我的更有价值。

于 2010-08-22T04:18:35.607 回答