Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как использовать unmanaged кода в C#?  (Прочитано 6309 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Diana
Гость
« : 15-05-2008 09:11 » 

Здраствуйте!
Подскажите пожалуйсто, я хочу написать на C# приложения которое получает список подключенных USB устройств,для этого мне надо использрвать функции Win32API: SP_DEVINFO_DATA и т. д.
как использовать эти функции в С#?
Зарание спасибо!!!!!!!!!!!!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 15-05-2008 09:29 » 

Для этого надо просто объявить использование этой ф-ции из соответствующей системной DLL.

Например для ф-ции Beep

[DllImport("kernel32.dll")]
public static extern bool Beep(int frequency, int duration);

Если такое часто используется то для Студии есть аддинчик, кажется PInvoke - просто выбираешь из списка системную ф-ю, а он вставляет C# код.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 15-05-2008 09:30 » 

http://www.red-gate.com/products/PInvoke.net/index.htm
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Diana
Гость
« Ответ #3 : 15-05-2008 11:05 » 

Я в принципе так и делаю.
[DllImport("setupapi.dll", SetLastError=true)]
   public static extern  unsafe int SetupDiGetClassDevs(
         ref Guid  lpGuid,
         int*     Enumerator,
         int*      hwndParent,
         ClassDevsFlags  Flags
);
но при определении структур:
[StructLayout(LayoutKind.Sequential)]
        public unsafe struct SP_DEVICE_INTERFACE_DATA
      {
         public int cbSize;
            public  Guid InterfaceClassGuid;
         public int Flags;
         public int Reserved;
      }
//////////////////////////////////////////////////////
[StructLayout(LayoutKind.Sequential, CharSet= CharSet.Ansi)]
      public unsafe struct PSP_DEVICE_INTERFACE_DETAIL_DATA
      {
         public int  cbSize;
         [MarshalAs(UnmanagedType.ByValTStr, SizeConst= 256)]
         public string DevicePath;
      }
//////////////////////////////////////////////////////
[StructLayout(LayoutKind.Sequential, CharSet= CharSet.Ansi)]
      public unsafe struct DATA_BUFFER
      {
         [MarshalAs(UnmanagedType.ByValTStr, SizeConst= 1024)]
         public string Buffer;
      }
 мне выдается ошибка:
Unsafe code may only appear if compiling with /unsafe   
может я не так структуру определила?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 15-05-2008 11:32 » 

Аааа ну дык это ж совсем другое.

возьми всё в скобки

usafe
{

.... код где используется эта ф-я

}

См. ещё здесь
http://forum.shelek.ru/index.php/topic,14759.0.html

зы Кстати такое использование внешних ф-ций сводит на нет все преимущества .NET в плане совместимости модулей.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 15-05-2008 17:52 » 

Джон, каламбуришь Улыбаюсь

Цитата
сводит на .НЕТ все преимущества .NET
Отлично
Записан

Diana
Гость
« Ответ #6 : 15-05-2008 18:55 » 

спасибо за советы все получилось Улыбаюсь!
« Последнее редактирование: 16-05-2008 14:07 от Джон » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines