Как разрешить "компьютер" неоднозначно между объявлениями в модулях "GlbSoft.SWB.SS.My.MyProject" и "GlbSoft.SWB.SS.My.MyProject"

Я пытаюсь получить доступ к текущей настройке NUM LOCK на компьютере под управлением VBA/VB.NET: - Windows 7 - Visual Studio 2010 - Microsoft (Office) Excel 2010

Вот код:

Public Const _GlobalDefinitions As String = "GlobalDefinitions"
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
Public Const VK_NUMLOCK As Integer = &H90
Public Const KEYEVENTF_EXTENDEDKEY As Integer = &H1
Public Const KEYEVENTF_KEYUP As Integer = &H2
Public InitialNumLockState As Boolean

Public Sub CheckNumLockState(Optional mWriteback As SSWriteback = Nothing)
    Try
        If InitialNumLockState Then
            If Not My.Computer.Keyboard.NumLock Then
                keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
                keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
            End If
        End If
    Catch ex As Exception
        If Not mWriteback Is Nothing Then
            AddToErrorLog(mWriteback, _GlobalDefinitions & ":" & System.Reflection.MethodBase.GetCurrentMethod.Name.ToString & "> " & ex.Message & ", " & ex.StackTrace, TraceEventType.Error)
        End If
    End Try
End Sub

Переменная InitialNumLockState устанавливается ранее в процессе следующим образом:

    InitialNumLockState = My.Computer.Keyboard.NumLock  

Первоначальная ссылка на My.Computer.KeyBoard.NumLock работает нормально (и я могу запросить ее в окне наблюдения во время выполнения) и инициализирует переменную InitialNumLockState, например, True, если клавиша NUM LOCK включена.

Однако во второй ссылке на My.Computer.KeyBoard.NumLock я получаю следующую ошибку:

"Компьютер" неоднозначен между объявлениями в модулях "GlbSoft.SWB.SS.My.MyProject" и "GlbSoft.SWB.SS.My.MyProject".

Обратите внимание, что в сообщении об ошибке говорится, что ссылка неоднозначна, поскольку она присутствует в двух модулях с одинаковыми именами. Конечно, это невозможно. Используется только один проект / пространство имен (GSI_SWB_SS/GlbSoft.SWB.SS).

Есть ли у кого-нибудь какие-либо идеи или идеи относительно этой ошибки и что можно посмотреть, чтобы ее исправить?

2 ответа

Я столкнулся с той же проблемой в данный момент в моем приложении. Я думаю, что VS создает экземпляр Computer в каждом My каждого .dll, Я обошел проблему.

В моем приложении у меня есть уровень инфраструктуры, где я добавил

Namespace Infrastructure.MYLOCAL
  <HideModuleName> _
  Public Module MYLOCAL
    Public MYComputer = My.Computer
  End Module
End Namespace

и поскольку все мое приложение использует уровень инфраструктуры, оно работает. я использую MYComputer вместо my.Computer,

Да, это возможно, и это именно та ошибка, которая появляется. Помните, что с точки зрения компилятора важно не имя файла, а объявление, сделанное в нем. Ищите повторяющиеся объявления.

В моем случае кто-то сделал резервную копию файла, оставив его в той же папке и просто переименовав имя файла в дату резервного копирования. Просто найдите и измените расширение файла с .vb на что-то вроде .OLD.

Другие вопросы по тегам