![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Sonechka |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 3.2.2012 Репутация: нет Всего: нет |
Доброго времени суток, уважаемые! Имеется у меня исходник на Delphi, который выводит список всех устройств в TreeView, как в "Диспетчере устройств", дополнительно выводит в ListBox сетевые устройства и дисковые накопители. Ввиду того, что мной изучался Delphi (давненько по программистским меркам это и было), а он сейчас (да и тогда) был не актуален, появилось у меня желание овладеть C++ (2 недели уже овладеваю). Начал не с самых азов (все языки ведь похожи). Начал с простого, стал переписывать более-менее понятный мне код. Для начала, переписал кнопочки для вывода сетевых и дисковых устройств в соответствующие ListBox'ы, но в обоих обработчиках события OnClick есть функция GetDeviceName (понятно из названия зачем она), а перевести её не могу. Ниже привожу пример её, написанной на Delphi (вроде она простая, понять не трудно будет):
Собственно о том, что может быть непонятно в коде (сам этого не помню, специально искал): #0 - признак окончания строки; @ - адрес переменной; Дополнительно привожу пример обработчика для вывода дисковых устройств (для сетевых всё то же самое, только одна переменная иначе названа (А то подумаете, что за халявой пришёл
Для сетевых код такой же, только вместо DrivePnPHandle - NetPnPHandle, ну и ListBox не DrivesListBox, а NetDevicesListBox. Заодно проверите этот код для кнопки, но компилятор только ругается на GetDeviceName. Показывать то, что я навоял в процессе переписывания GetDeviceName стыдно, но вот:
В общем, хочу чтобы вы мне показали и объяснили (прошу не отсылать к литературе, лучше понимаю на примерах). |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
У вас почти все правильно. Должно быть так -
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Девятая строка кода выглядит как-то неправильно ;)
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| maxfox |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.7.2009 Репутация: нет Всего: нет |
Подскажите пожалуйста, почему не получается скомпилировать описанный выше код?
На сам код студия не ругается, но выдаёт кучу ошибок во включаемых файлах setupapi.h, и prsht.h и spapidef.h. При этом в проект я включил файл: #include <setupapi.h> Я предполагаю, что необходимо ещё включить какие то заголовочные файлы или библиотеки, но не знаю, какие. Подскажите пожалуйста! |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Судя по наличию типа AnsiString код предназначался не для студии, а для Bulder'а
windows.h в начале включен? |
||||
|
|||||
| maxfox |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.7.2009 Репутация: нет Всего: нет |
xvr,
Мне кажется, что судя по синтаксису заголовка процедуры:
-это студия и проект Windows Forms. Но. могу и ошибаться. windows.h - не было. когда включил, все предыдущие ошибки ушли, но появилась другая: В проекте пользуюсь NET библиотекой, чтобы взять путь, от куда запущена программа: System::IO::Directory::GetCurrentDirectory(); однако в библиотеке WinBase.h, есть такая строчка: #define GetCurrentDirectory GetCurrentDirectoryW На сколько я понял, эта строчка переопределяет(или что то в этом роде) функцию из NET - библиотеке. В общем. выдаёт такую ошибку: error C2039: GetCurrentDirectoryW: не является членом "System::IO::Directory" Я не понимаю сути этой ошибки, т.к. у меня в тексте нигде нет переменной: GetCurrentDirectoryW |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Этот исходник да - на .NET (C++/CLI)
Это проблема с совместимостью .NET и WinAPI. windows.h расчитана на чистый С, и она явно передралась с .NET заголовками. В WinAPI #define GetCurrentDirectory GetCurrentDirectoryW - это стандартный способ настройки приложения под Unicode. Советую не рожать помесь ужа с ежём, а писать либо на C# либо на чистом С++. С++/CLI - это порождение проблем совместимости, и делать на нем проект с нуля это явный идиотизм и самоубийство |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
после включения windows.h можно конечно прописать:
но не факт, что не появится чего-то другого, вобщем, это будет куча undef'ов, пока не появятся проблемы с дублированием типов данных и функций ( и это будет финиш ), p.s.: вот потом посмотришь на эту гору костылей и наверное поймешь, что проще было пользоваться чем-то одним -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |