VBA 32비트/64비트
좋아, 이 게시물의 제목이 조금 이상할 수 있습니다. 진심으로, 누가 여전히 이전 32비트 버전을 사용하고 있습니까? 우리는 2020년! 제 경우에는 예를 들어 서버에 연결하는 관리 시스템에 통합해야 하는 오래된 창고 기계가 있는 소규모 클라이언트가 있습니다. 예를 들어 64비트 버전의 경우 10개, 32비트 버전의 경우 1개의 시스템을 가질 수 있습니다. 이것은 특히 자동 업데이트 시스템을 구축한 경우 문제입니다. 그래서 이 문제를 해결하는 데 도움이 될 수 있는 솔루션을 찾았습니다. 저에게 문제는 모듈에 있는 함수의 선언문이 2가지 버전에서 다르거나 64비트 버전에서는 선언문에 키워드 PtrSafe를 추가해야 한다는 것이었습니다. Microsoft는 PtrSafe 키워드를 추가하면 선언문이 두 버전 모두에서 작동하지만 일부 조건에서는 작동하는지 확인합니다. 그래서 32비트로 첫 번째 버전을 만들 때 다음과 같은 선언문이 있었습니다.
Declare Function aht_apiGetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (OFN As tagOPENFILENAME) As Boolean
이제 다음과 같이 변경해야 합니다.
Declare PtrSafe Function aht_apiGetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (OFN As tagOPENFILENAME) As Boolean
아주 간단합니다. 그러나 Microsoft가 this article에서 말했듯이 나머지 32비트 코드를 계속 사용하려면 몇 가지 조건을 준수해야 합니다. 그래서 저는 그렇게 선언된 함수가 많지 않기 때문에 Microsoft 기사의 If 문을 사용하기로 결정했습니다. 최종 결과는 다음과 같습니다.
#If VBA7 Then
Declare PtrSafe Function aht_apiGetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (OFN As tagOPENFILENAME) As Boolean
#Else
Declare Function aht_apiGetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (OFN As tagOPENFILENAME) As Boolean
#End If
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(VBA 32비트/64비트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rquattrogtl/vba-32-bit-64-bit-1pd3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)