2010-03-15 3 views
2

우리가 예를 들어 다음과 같은 승리의 API 호출을 직접 선택 :P/호출 32 비트 및 64 비트 시스템에서

BOOL MessageBeep(UINT uType); // from User32.dll 

입력 매개 변수가 모두 32 비트가 될 수있는 경고음 유형을 지정하는 UINT입니다 및 64 비트 정수. 우리가 호출하는 Windows 버전에 따라 달라집니다 (또는 잘못 되었습니까?).

나는 P를 원하는 경우/C 번호에서 메시지 경고음을 호출, 그래서 내가 같이 DllImport 선언을 적용

[DllImport("User32.dll")] 
static extern Boolean MessageBeep(UInt32 beepType); 

윌 윈도우 64에서이 코드를 C#을 사용할 수 있습니까?

  • 그렇다면 64 비트 정수가 필요한 반면 호출에 32 비트 정수를 호출하는 것이 좋습니다. (이 경우 내가 맞다고 가정 할 때)?
  • 만약 아니라면, C#에서와 같이 적절한 플랫폼 독립적 인 P/Invoke 선언이 어떻게 나타나야합니까?

답변

5

틀렸어.

그러나 비트율에 따라 달라지는 HANDLE과 같은 유형의 경우 IntPtr을 사용해야합니다.

P/Inoke 선언에 대해 확실하지 않은 경우 먼저 확인하려면 here입니다.

+0

왜 DWORD 비트는 종속적이며 UINT가 아닌가? 내가 읽은 C 데이터 유형 문서에 반하는 것 같습니다. MSDN의 Windows 데이터 형식 페이지 : http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx DWORD : typedef unsigned long DWORD; UINT : typedef 부호없는 int UINT; – user256890

+0

당신 말이 맞아요. 나는'HANDLE '을 의미했다. – SLaks

+1

답변을 연장하기 위해 32/64 비트 안전 코딩에서 다음 MSDN 권장 사항을 발견했습니다. http://msdn.microsoft.com/en-us/library/aa384242(VS.85).aspx – user256890

관련 문제