Как разрешить "компьютер" неоднозначно между объявлениями в модулях "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.