Модераторы: 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   Вверх
Unregistered
Дата 6.11.2003, 15:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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


Unregistered











А как быть с таким случаем:
функция CeCloseHandle(HANDLE h) закрывает и файл (чере его h) и поток (тоже через его h), НО
допустим я делаю CreateProcess(NameProgramm, , , , , processInform), где структура
PROCESS_INFORMATION processInform;
Код

[ StructLayout( LayoutKind.Sequential )]
public class PROCESS_INFORMATION
{
public int hProcess;
public int hThread;
public int dwProcessId;
               public int dwThreadId;
}

Тогда как делать CeCloseHandle для processInform.hProcess, ведь он int? Как преобразовать его в handle?
  Вверх
Unregistered
Дата 6.11.2003, 18:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Правильно будет?
IntPtr(processInform.hProcess)
:7
  Вверх
stab
Дата 6.11.2003, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



угу, правильно smile.gif

кароче, если делать все по умному smile.gif то handle = IntPtr, если как проше то handle = int
Тут надо сразу думать о переносимости кода, если переносимость неприоритетна то делать все как int ;)


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

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


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

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


 




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


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

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