2009-03-16 1 views
1

소켓을 사용하여 통화 기록 API를 사용하려고합니다. 우리에게는 API 문서가 있지만 샘플은 모두 C++로되어 있습니다.VB.NET 또는 C#에 상응하는 C++ ULONG 정의?

어떻게 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

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 32 비트 부호없는 정수의 형태이다. 이 경우 상수는 부호가 필요하지 않으므로 C#에서 정수를 사용하거나 VB.NET에서 정수를 사용하십시오.

VB.NET

Public Const SIF_GENERAL as Integer = &H08000000 

C#을

public const int SIF_GENERAL = 0x08000000; 

데이터 크기가 API 호출에 대한 잘못된 것 때문에 64 비트 길이의 데이터 형식을 사용하지 마십시오.

2

당신은 값을 사용하여 열거하여 더 많은 .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이 될 수 있지만, 이점은 상당히 적습니다. 당신이 상수가있는 경우

1

> = 0x8000000을, 당신은 그들에게이 방법을 정의 할 수 있습니다 :

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

See this MSDN article on unchecked합니다.