2009-03-16 4 views
1

J'essaie d'utiliser une API d'enregistrement d'appels utilisant des sockets. Nous avons la documentation API, mais les exemples sont tous en C++.C++ ULONG définitions à VB.NET ou équivalent C#?

Comment dois-je déclarer ce qui suit dans VB.NET ou C#?

#define SIF_GENERAL 0x08000000 
#define SIF_CONFIGURATION 0x08010000 
#define SIF_ARCHIVE 0x08020000 
#define SIF_SEARCH 0x08030000 
#define SIF_REPLAY 0x08040000 
#define SIF_STATISTICS 0x08050000 
#define SIF_ENGINEER 0x08060000 

Note de la documentation: identificateurs de messages non signés sont des valeurs 32 bits (ULONG).

Répondre

4

VB.NET

Module Constants 
    Public Const SIF_GENERAL as Integer =&H08000000 
    Public Const SIF_CONFIGURATION As Integer = &H08010000 
    Public Const SIF_ARCHIVE As Integer = &H08020000 
    Public Const SIF_SEARCH As Integer = &H08030000 
    Public Const SIF_REPLAY As Integer = &H08040000 
    Public Const SIF_STATISTICS As Integer = &h08050000 
    Public Const SIF_ENGINEER As Integer = &h08060000 

End Module 

C#

public static class Constants { 
    public const int SIF_GENERAL =0x08000000; 
    public const int SIF_CONFIGURATION = 0x08010000; 
    public const int SIF_ARCHIVE = 0x08020000; 
    public const int SIF_SEARCH = 0x08030000; 
    public const int SIF_REPLAY = 0x08040000; 
    public const int SIF_STATISTICS = 0x08050000; 
    public const int SIF_ENGINEER = 0x08060000; 
} 
2

C++ ULONG est un type entier non signé de 32 bits. Dans ce cas, vos constantes n'ont pas besoin d'être signées, utilisez simplement int dans C# ou Integer dans VB.NET.

VB.NET

Public Const SIF_GENERAL as Integer = &H08000000 

C#

public const int SIF_GENERAL = 0x08000000; 

Ne pas utiliser un type de données à long 64 bits car la taille des données est incorrecte pour vos appels API.

2

Vous pouvez rendre les valeurs plus regarder .NETty en utilisant les énumérations:

//C# 
public enum SIF : uint 
{ 
    SIF_GENERAL = 0x08000000, 
    SIF_CONFIGURATION = 0x08010000, 
    SIF_ARCHIVE = 0x08020000, 
    SIF_SEARCH = 0x08030000, 
    SIF_REPLAY = 0x08040000, 
    SIF_STATISTICS = 0x08050000, 
    SIF_ENGINEER = 0x08060000, 
} 

ou

'VB.NET 
Public Enum SIF As UInt32 
    SIF_GENERAL = &H08000000 
    SIF_CONFIGURATION = &H08010000 
    SIF_ARCHIVE = &H08020000 
    SIF_SEARCH = &H08030000 
    SIF_REPLAY = &H08040000 
    SIF_STATISTICS = &H08050000 
    SIF_ENGINEER = &H08060000 
End Enum 

De cette façon, vous obtenez le type et la sécurité de découvrir des énumérations (sauf si vous les croisez via votre interface, où vous aurez besoin de les diffuser).

Vous pouvez même augmenter l'apparence .NET en les renommant - par exemple SIF.SIF_GENERAL peut devenir SIF.General, bien que l'avantage y soit assez faible.

1

Si vous avez des constantes> = 0x8000000, alors vous pouvez les définir ainsi:

class Test 
{ 
    public const int AllBits = unchecked((int)0xFFFFFFFF); 
    public const int HighBit = unchecked((int)0x80000000); 
} 

See this MSDN article on unchecked.