Autohotkey 를 사용한지는 꽤 오래 된것 같고 저는 보통 Autohotkey 를 설치할때 recommend 버전인 unicode 32 비트를 설치하곤 합니다. 그런데 최근에 Autohotkey dllcall 을 사용하여 msvcrt.dll 의 _i64toa 함수를 사용하다 보니 제가 설치한 unicode 32-bits Autohotkey 에서는 정상적으로 동작을 하지 않더군요. _i64toa 함수는 radix 를 변환하는 함수이고 보통 2 진수, 8 진수, 16 진수 등으로 변환하는데 사용하곤 합니다.

_i64toa 함수의 사용 예는 아래와 같습니다. 아래 예는 숫자 15를 16진수(Hexa) 값으로 변환하는 예인데~



decNumber := 15

radix := 16

VarSetCapacity(kk,65,0)

DllCall("msvcrt\_i64toa", "Int64", decNumber, "Str", kk, "Int", radix)

msgbox %kk%

실행을 해보면 아래와 같이 정상적으로 f 라는 값이 나오게 됩니다.

그런데 decNumber := 16 으로 하게 되면 아래와 같이 뭔지 알 수 없는 값이 나오게 되더군요.

여러가지 방법들을 시도하다 알게 된게~ Autohotkey 가 설치된 폴더(C:\Program Files\AutoHotkey)에 같이 들어있는 AutoHotkeyA32.exe 즉 ANSI 32-bit 를 사용하면 정상적으로 동작을 하더군요. decNumber := 16 인 경우에 대해 AutoHotkeyA32.exe 를 사용하여 실행해보면 아래와 같이 정상적인 Hexa 값을 얻을 수 있습니다.

Autohotkey 를 설치 할때 보면 아래와 같이 ANSI 32-bit 의 경우 legacy scripts 와의 호환성이 좋다고 나오고 따라서 기존 DLL 과 같이 좀 오래된 라이브러리를 사용하는 경우에는 ANSI 32-bit Autohotkey 를 사용하는게 적절할 듯 보입니다.

그런데 우리는 한글을 주로 사용하고 한글 정규 표현식 등을 사용한다면 unicode 버전을 사용하는게 좋으므로 제가 내린 결론은 unicode 32 비트 버전을 default 로 설치하고~ legacy scripts 를 사용할때만 선택적으로 ANSI 32-bit Autohotkey 를 사용하는게 적절할것 같습니다.



Microsoft.Office.Interop.Word 를 사용하여 만든 프로그램을 배포시 office 버전이 안 맞아서 에러가 나는 경우가 종종 있다. 

 

이런 경우에는 Microsoft.Office.Interop.Word.dll 파일을 실행 파일과 같이 전달 해 주면 해결이 되곤 한다.

 

나의 경우 위 파일은 아래 주소에 있었다.

 

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll

 

Excel 프로그램을 만드는 경우 Microsoft.Office.Interop.Excel 을 사용하겠고 해당 파일은 아래 주소에 있다.

 

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll

 

dll 파일은 배포한 실행 프로그램과 같은 폴더에 위치 시키거나 path 로 설정된 폴더에 위치 시키면 된다.

+ Recent posts