C# и Win API

Тема в разделе "LANGS.C", создана пользователем Ustus, 30 июн 2008.

  1. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Собственно, в сабже все сказано.
    Если коротко, есть некий проект на шарпе, надо использовать только DeviceIoControl и сопутствующие. Но этот зловещий до-диез я вижу третий раз в жизни, поэтому оный достойно отражает мои попытки объяснить ему, чего от него требуется.
    Пока я забросил все хитросплетения и пытаюсь тупо кнопкой тупо открыть сидюк. Это как бы например. В MSDN-е даже намека не нашел... или я не знаю как ОНО называется... :dntknw:
     
  2. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    А в чем проблема собственно?
     
  3. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  4. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    UTeX

    System.Runtime.InteropServices...
    [DllImport...
    надо же че гады выдумали... :lol:

    Спасибо! Похоже это именно то, что надо... по крайней мере, на первый взгляд :)
     
  5. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Хм. С API работает. А вот со своей DLL-кой не получается - выкидывает исключение.
    То есть то, что приведено в примере из MSDN-а не пашет.
    Там что-то типа такого:
    Код (Text):
    1. // mydll.cpp
    2.  
    3. int __declspec(dllexport) myf(int x)
    4. {
    5.     return x*10;
    6. }
    Код (Text):
    1. // zz.cs
    2.  
    3. [DllImport "mydll.dll"]
    4. public extern int myf(int x);
    5.  
    6. ...
    Че-то я потерялся...
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Наверное объявления функций разные, манглинг там, еще что-нибудь...
     
  7. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Ustus
    Пожалуста:
    Код (Text):
    1. [DllImport ("mydll.dll", EntryPoint="?myf@@YAHH@Z")]
    2. public extern int myf(int x);
    Или так:
    Код (Text):
    1.   // mydll.cpp
    2.   extern "C" int __declspec (dllexport) __stdcall myf(int x){return x*10;}
    3.  
    4.   // mydll.cs
    5.   [DllImport ("mydll.dll", EntryPoint="_myf@4")]
    6.   public extern int myf(int x);
    Вообщем наверно через def-фаил можно настроить нормальные имена экспортируемых функций.
     
  8. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Вспомнил:

    Код (Text):
    1.   // mydll.cpp
    2.   extern "C" int myf(int x){return x*10;}
    3.  
    4.   // mydll.def
    5.   LIBRARY "mydll"
    6.   EXPORTS myf
    7.  
    8.   // mydll.cs
    9.   [DllImport ("mydll.dll")]
    10.   public extern int myf(int x);
     
  9. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Arthur
    Спасибо.
    Оба варианта интересные, но как-то это жутковато... я так понимаю, что отэкспортировать плюсплюсный класс в шарп лучше забыть сразу :):):):)
     
  10. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Это делается через COM.
     
  11. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Как правило в спецификации .NET отсутствует множественное наследование классов, а в Си плюс плюс, как раз наоборот. Но дело в том что .NET является, как бы это, сказать, логическим продолжением COM технологии. Так к примеру в .NET можно наследовать множество интерфейсов, как раз тех что используется в COM.

    Так что абсолютно согласен с halyavin'ом :)

    А вообще зачем вам нужны Си++ классы? Вроде, как свои неплохо работают? Или почему бы не программировать в связке Native + Managed C++, и забить на Си шарп?
     
  12. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Arthur
    ну не знаю... меня почему-то Managed C++ пугает еще больше C#. :):):)
     
  13. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Ustus
    Конечно по синтаксису, Си шарп намного чище и красивее :) Но тем не менее, то что может сделать Си++ шарпу, только снится с его поддержкой указателей :) К тому же, можно помутить с препроцессором, глядишь что-нибудь да выйдет :)
     
  14. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Arthur

    Интересно, и чем же отличается "поддержка" указателей в С# и MC++ ???
     
  15. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    zhindos
    Я имею ввиду смесь Native и Managed у Си++, а у шарпа только поддержка unsaf'a с указателями.
     
  16. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Arthur
    Спасибо за совет:
    - похоже, это было именно то, что надо! Только не сразу додумался, как прилепить плюсплюсные хедеры... и библиотеки... но теперь работает. :) Ура!