C ++ ULONG определения к VB.NET или C # эквивалент? - PullRequest
1 голос
/ 16 марта 2009

Я пытаюсь использовать API записи звонков с использованием сокетов. У нас есть документация по API, но все примеры на C ++.

Как мне объявить следующее в VB.NET или 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

Примечание из документации: идентификаторы сообщений представляют собой 32-разрядные значения без знака (ULONG).

Ответы [ 4 ]

4 голосов
/ 16 марта 2009

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 голосов
/ 16 марта 2009

Вы можете заставить значения выглядеть более .NETty, используя перечисления:

//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,
}

или

'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

Таким образом, вы получаете возможность обнаружения и безопасность типов перечислений (кроме случаев, когда вы пропускаете их через интерфейс, где вам нужно будет их приводить).

Вы можете даже улучшить внешний вид .NET, переименовав их - например, SIF.SIF_GENERAL может стать SIF.General, хотя преимущество там довольно небольшое.

2 голосов
/ 16 марта 2009

C ++ ULONG - это 32-разрядное целое число без знака. В этом случае ваши константы не обязательно должны быть без знака, поэтому просто используйте int в C # или Integer в VB.NET.

VB.NET

Public Const SIF_GENERAL as Integer = &H08000000

C #

public const int SIF_GENERAL = 0x08000000;

Не используйте тип данных длиной 64 бита, так как размер данных будет неправильным для вызовов API.

1 голос
/ 16 марта 2009

Если у вас есть константы> = 0x8000000, вы можете определить их следующим образом:

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

См. Эту статью MSDN на непроверенной .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...