现在我正在将一个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
无法理解为什么它不起作用并感到沮丧。有什么建议吗?
答案 0 :(得分:5)
你正在重新发明轮子。尝试:
string ipAddress = "x.x.x.x";
string hostName = System.Net.Dns.GetHostEntry(ipAddress).HostName;
答案 1 :(得分:3)
如果你想开始清理代码,Dan Tao说的所有内容都是如此,但你遗漏了太多的东西,这些东西在你的VB6项目的其他地方明显定义,以使其按原样运行。
但我认为这可能无法解决这里的根本问题。看起来您正在尝试编写代码的文字端口,而无需重写它以正常使用或利用.NET基类库。
查看MSDN中的System.Net.Dns课程。
如果您还没有,我建议您阅读一些教程或书籍,以便开始使用C#和.NET。它与VB6完全不同,你只是想把它与C#联系起来。“
答案 2 :(得分: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?)
这些是非常肤浅的观察,仅仅基于您的代码细节。对于您在此处尝试实现的更基本问题的更有用的评论,我建议您将Xiaofu's和Christopher Painter's答案视为比我的更有价值。