2014-09-16 2 views
1

Window API에서 VkKeyScan을 사용하려하지만 해당 함수가 호출 될 때마다 프로그램이 중단됩니다. 이런 방식으로 가져 와서 사용한 다른 Window API 함수에는 아무런 문제가 없습니다. 내 시스템 콜에 문제가있어 .SSS 콜? C에서syscall.Syscall 및 WinAPI 문제가 발생했습니다

var (
    user32, _ = syscall.LoadLibrary("user32.dll") 
    vkKeyScan, _ = syscall.GetProcAddress(user32, "VkKeyScan") 
) 

func VkKeyScan(char byte) (int16, syscall.Errno) { 
    var nargs uintptr = 1 
    ret, _, callErr := syscall.Syscall(uintptr(vkKeyScan), nargs, uintptr(char), 0, 0) 
    return int16(ret), callErr 
} 
+0

'uintptr (char)'이 (가) 캐스트되었거나 주소를 가지고 있습니까? 이 함수는 포인터를 원하지 않는다. –

+0

@BenVoigt : 캐스트, syscall.Syscall은 인수 만 uintptr로 취합니다. – jacob

답변

4

VkScanKey 작품이 때문에 #define d를 대략 다음과 같습니다 :.

#ifdef UNICODE 
# define VkScanKey VkScanKeyW 
#else 
# define VkScanKey VkScanKeyA 
#endif 

그래서 VkScanKeyVkScanKeyW는 실제 기호 설명하지 않고, 그 GetProcAddress가에 걸릴 수있는 유일한 형태의 경우, 당신은 Syscall이 아닌 GetProcAddress이 실패했다는 것을 알았을 것입니다.이 사실은 당신에게이 사실을 알려줄 수도 있습니다.

관련 문제