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

コードのクリーンアップを開始したいが、VB6 プロジェクトの他の場所で明らかに定義されていて、これをそのまま機能させるにはあまりにも多くのものが不足している場合に、Dan Tao が言ったことのすべて。

しかし、これは根本的な問題に対処できていない可能性があると思います。.NET Base Class Libraries で適切に動作するように、またはそれを利用するためにコードを書き直すことなく、コードのリテラル ポートを実行しようとしているようです。

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

これらは、純粋にコードの詳細のみに基づく非常に表面的な観察です。あなたがここで達成しようとしていることのより基本的な問題に関するより有用なコメントについては、XiaofuChristopher Painter の回答を私の回答よりも価値のあるものとして扱うことを強くお勧めします。

于 2010-08-22T04:18:35.607 に答える