Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование типов. 
:(
    Опции темы
Guest
  Дата 6.11.2003, 13:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не пинайте сильно за детские вопросы. sad.gif
Как в C# преобразовать типы char* в string и обратно.
Какой тип в C# соответствует типу WCHAR, TCHAR (VC++), и как к этому типу преобразовать char*.
И вообще где про енто написано (кроме MSDN).

Как описать константу, которая в VC++ описана так:
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)

Спасибо.
  Вверх
stab
Дата 6.11.2003, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
Как описать константу, которая в VC++ описана так:
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)


хендлы обычно в C# типа IntPtr, так что похоже придется при сравнении делать так if (Handle == new IntPtr(-1)) {...}


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.11.2003, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



можно еще так:

Код
public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);


но это уже не совсем константа smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.11.2003, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
Какой тип в C# соответствует типу WCHAR, TCHAR (VC++)

char smile.gif

Цитата
Как в C# преобразовать типы char* в string ...

у String есть конструктор unsafe public String(char*);

Цитата
и обратно.

это уже от задачи зависит, если надо параметр в API функцию передать то автоматом конвертится, а если буфер какой заполнить то просто копирование посимвольное.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Unregistered
Дата 6.11.2003, 14:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А вообще-то, как объявить константу типа Guid?

Guid CLSID_IMan = new Guid("{499C0C20-A766-11cf-8011-00A0C90A8F78}");

confused.gif
  Вверх
Unregistered
Дата 6.11.2003, 14:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата

похоже придется при сравнении делать так if (Handle == new IntPtr(-1))

Но: тип Handle есть int, поэтоиу '==' не проходит.
  Вверх
stab
Дата 6.11.2003, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



описывай как string потом new Guid(myStringGUID) или через readonly поля


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.11.2003, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



тип Handle в .net есть IntPtr, а если у тебя Handle типа int то и работай с ним как с обычным int.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.11.2003, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Кстати HANDLE ни когда не был int, вот описание из winnt.h

Код
typedef PVOID HANDLE;


Сделано это затем, что handle это либо индекс в системной таблице либо указатель на запись в системной области памяти, т.е. размер handle напрямую зависит от системы адресации. Т.е. если адресаци 32-х битная, то размер handle 32 бита, если 64-х битная, то размер 64 бита.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Unregistered
Дата 6.11.2003, 14:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











То есть надо так:

IntPtr Handle = new IntPtr();
...
if (Handle == new IntPtr(-1)) //правильно или же public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);

  Вверх
Unregistered
Дата 6.11.2003, 14:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата

у String есть конструктор unsafe public String(char*);

А в каком using лежит unsafe public String(char*)?
  Вверх
stab
Дата 6.11.2003, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



мне больше нравиться public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1), красивее как-то smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 6.11.2003, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
А в каком using лежит unsafe public String(char*)?

System

А что конкретно нужно со строками делать?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Unregistered
Дата 6.11.2003, 14:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Короче, я запускаю из Dll, например, CeCreateFile(string lpFileName, ...), но так как на покете только Unicode, то поймет ли он string как Unicode?
  Вверх
stab
Дата 6.11.2003, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



должен, но на всякий случай можно пропиасть CharSet:

Код

 [DllImport("user32.dll", CharSet=CharSet.Unicode)]
 public static extern int MessageBoxW(int hWnd, String text, String caption, uint type);



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.