1

在某些计算机中,当我使用 byVal 修饰符时会出现错误。我的代码中有一些,但我设法删除了所有这些,但我在以下代码中需要它:

Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
  ByVal hdc As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
  ByVal nIndex As Long) As Long

Const HWND_DESKTOP As Long = 0
Const LOGPIXELSX As Long = 88
Const LOGPIXELSY As Long = 90

'--------------------------------------------------
Public Function TwipsPerPixelX() As Single
'--------------------------------------------------
'Returns the width of a pixel, in twips.
'--------------------------------------------------
  Dim lngDC As Long
  lngDC = GetDC(HWND_DESKTOP)
  TwipsPerPixelX = 1440& / GetDeviceCaps(lngDC, LOGPIXELSX)
  ReleaseDC HWND_DESKTOP, lngDC
End Function

'--------------------------------------------------
Public Function TwipsPerPixelY() As Single
'--------------------------------------------------
'Returns the height of a pixel, in twips.
'--------------------------------------------------
  Dim lngDC As Long
  lngDC = GetDC(HWND_DESKTOP)
  TwipsPerPixelY = 1440& / GetDeviceCaps(lngDC, LOGPIXELSY)
  ReleaseDC HWND_DESKTOP, lngDC
End Function

我确信错误是由于 ByVal 造成的。我在更多功能中使用了 ByVal,但它们没有工作,但是当我以另一种方式(不使用 ByVal)进行操作时,它们可以工作,如果我只是删除这个函数,所有其他函数都可以正常工作。我无法理解原因。

另一个奇怪的事情是它只发生在某些计算机上(Win8,office 2013)。但我有相同的操作系统、办公和安全设置。它给出的错误是编译错误:

“隐藏模块中的编译错误:Module4”

4

0 回答 0