![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| vladd |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
VB Net 2010
Обьявил функцию
Выскакивает предупреждение CA1060 : Так как метод является методом P/Invoke, должен быть определен в классе с именем NativeMethods, SafeNativeMethods или UnsafeNativeMethods. Смотрю в msdn CA1060: переместите P/Invokes в класс NativeMethods Смотрю пример В следующем примере показан метод Interaction.Beep, создающий оболочку для функции MessageBeep из библиотеки user32.dll.P/Invoke MessageBeep находится внутри класса NativeMethods.
Ничего не понял. Попробывал по разному. Ничего не получилось. Как правильно переместить DestroyWindow в класс NativeMethods? |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В смысле? Объяснить как разместить метод внутри класса что ли? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| vladd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
Да. Как мне правильно обьявить Function DestroyWindow чтобы не было этого предупреждения и других тоже.
Это сообщение отредактировал(а) vladd - 7.3.2012, 07:17 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Что касается правильного объявления, то смотри здесь http://www.pinvoke.net/default.aspx/user32.destroywindow Ну, а если говорить о правильном местоположении, то ты ведь не показал в каком контексте она у тебя объявлена, я не очень понял смысл предупреждения, возможно ты объявил функцию вне класса или пытаешься вызвать из другого класса, не смотря на то, что она приватная. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| vladd |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
Обьявил так как написано было на сайте
Но все равно пишет Предупреждение 1 CA1060 : Microsoft.Design : Так как метод является методом P/Invoke, 'PlaceBets.DestroyWindow(IntPtr)' должен быть определен в классе с именем NativeMethods, SafeNativeMethods или UnsafeNativeMethods. А обьявляю я его в модуле своего User control PlaceBets Это полный код модуля где я обьявляю DestroyWindow
|
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
vladd, я не в курсе, что это за ошибка и у тебя тут все равно кое что непонятно. Непонятно, что за классы в предупреждении, назначение некоторых переменных и откуда они берутся. Я сделал пример, где эта функция работает( в аттаче). А вообще, для уничтожения окна есть метод Dispose, так что мне в принципе непонятно, для чего дергать винапи.
Присоединённый файл ( Кол-во скачиваний: 2 )
destrwin.rar 61,75 Kb-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| vladd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
Спасибо за ответ. Твой пример запустил, работает. Но когда сделал анализ кода то же предупреждение
Предупреждение 1 CA1060 : Microsoft.Design : Так как метод является методом P/Invoke, 'Form1.DestroyWindow(IntPtr)' должен быть определен в классе с именем NativeMethods, SafeNativeMethods или UnsafeNativeMethods. D:\6 Програмирование\VB Net\destrwin\destrwin\Form1.vb 5 destrwin Я просто взял это из VB6, т.к. раньше писал немного на нем, для удаления контрола создаваемого динамически. А как применить метод Dispose попроще не знаю для удаления контролов создаваемых динамически. Это надо создавать коллекцию, затем как то искать тот контрол на котором кнопка для удаления этого контрола. А как указать этой кнопке именно этот котрол? Вообщем для меня то темный лес. А так я указал hwnd контрола в тексте кнопки при его создании, и при нажатии считываю его, и запускаю DestroyWindow. Только как убрать это предупреждение не знаю потому и спрашиваю у гуру, т.е. у Вас. Это сообщение отредактировал(а) vladd - 11.3.2012, 18:47 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
И что? Оно просто подсказывает как оптимизировать код, то есть привести в соответствие с определенным стилем. Можно переписать код вот так
Добавлено через 38 секунд У всех контролов есть этот метод, его просто надо вызвать. Добавлено через 2 минуты и 41 секунду Зависит от того, по какому принципу ты ее ищешь. ну есть вообще-то свойство Handle, я его использовал. Добавлено через 3 минуты и 22 секунды Кстати, метод Dispose я вызывал в своем коде для формы, точно так же это делается для любого контрола. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| vladd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
Еще раз спасибо. Но все равно пишет Предупреждение 1 CA1060 : Microsoft.Design : Так как метод является методом P/Invoke, 'Form1.DestroyWindow(IntPtr)' должен быть определен в классе с именем NativeMethods, SafeNativeMethods или UnsafeNativeMethods. D:\6 Програмирование\VB Net\destrwin\destrwin\Form1.vb 5 destrwin
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Замени код из аттача на то, что я оставил в предыдущем посте. Я проверял, ничего не пишет. Можно так же отключить предупреждения или конкретно это предупреждение. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| vladd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
А ты где проверял? Я проверяю VS 2010 меню Анализ/Запустить анализ кода на destrwin.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Вообще-то я написал, что предупреждение исчезает в исправленной версии кода, а у тебя тут первоначальная. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| vladd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 31.1.2009 Репутация: нет Всего: нет |
Извини это я оставил старое обьявление функции DestroyWindow, а надо было его удалить и по новому обьявить в Class NativeMethods. И большое спасибо. Все этого предупреждения больше нет. Этот вопрос закрыт.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Еще пара замечаний:
В настройках анализа кода можно отменить те предупреждения, которым не хочешь следовать, эти рекомендации выполнять не обязательно и у тебя могут быть свои правила. Ну и оператор Declare все еще поддерживается, а использование атрибута DllImport - альтернативный вариант записи(по крайней мере применительно к бейсику, вообще компилятор создает этот атрибут в обоих случаях). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |