728x90
Kernel32.dll에서 GetSystemTime / SetSystemTime 호출해서 사용하기
C# / .NET 에서 Native DLL (Unmanaged DLL)에 있는 함수를 호출하는 P/Inovoke(Platform Invoke) 방식을 사용하여
C#에서 WinAPI를 호출하거나 C/C++로 작성된 Native DLL 함수를 호출한다.
1. DllImport 키워드를 사용해서 함수 호출하기
using System.Runtime.InteropServices;
namespace TEST.APIs
{
public static class Kernel32
{
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool GetSystemTime(ref SYSTEMTIME st);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetSystemTime(ref SYSTEMTIME st);
}
}
2. Struct SYSTEMTIME
using System.Runtime.InteropServices;
namespace TEST.APIs
{
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME
{
public short Year;
public short Month;
public short DayOfWeek;
public short Day;
public short Hour;
public short Minute;
public short Second;
public short Milliseconds;
}
3. 호출해서 사용하기
//GetSystemTime
SYSTEMTIME getDate = new SYSTEMTIME();
GetSystemTime(ref getDate);
Console.Write("getSystemtime year: {0}", getDate.Year);
//SetSystemTime
public void SetSystemTimeFromDbServer()
{
using (var db = MasterContext.CreateDatabase())
{
var dbDate = db.ScalarQuery("SELECT GETDATE()").ExToDateTime(DateTime.Now).ToUniversalTime();
//
//
//
APIs.SYSTEMTIME setDate = new APIs.SYSTEMTIME();
setDate.Year = (short)dbDate.Year;
setDate.Month = (short)dbDate.Month;
setDate.Day = (short)dbDate.Day;
setDate.Hour = (short)dbDate.Hour;
setDate.Minute = (short)dbDate.Minute;
setDate.Second = (short)dbDate.Second;
//
//
//
APIs.Kernel32.SetSystemTime(ref setDate);
}
}
'개발언어 > C#' 카테고리의 다른 글
[C#] 고정크기배열 사용방법 #MarshalAs (0) | 2020.11.03 |
---|---|
[C#] x86/x64 환경에 따라 달라지는 P/Invoke 함수의 export 이름 (0) | 2020.11.03 |
[C#] if ~else if를 한 줄로 '삼항 연산자' (0) | 2020.11.03 |
[c#] [StructLayout(LayoutKind.Sequential)] (0) | 2020.11.02 |
[C#] - internal 접근 한정자 (0) | 2020.11.02 |