символ* указатель от строки в C#

Так же к некоторым из других ответов, я никогда не сделал, чтобы кандидат попросил видеть наш код. Даже если они сделали я имею очень стараться сделать так и скорее всего не был бы. Как упоминания Swati, в значительной степени любая нетривиальная система будет иметь разделы, которые выглядят хорошими поэтому даже наблюдение, что код не поможет так многому.

Лучше, чем рассмотрение фактического кода Тест Joel . В основном это - 12 вопросов "да" или "нет", что можно спросить работодателя. Чем больше да отвечают, тем лучше рабочая среда, как ожидают, будет. Это - очевидно, не надежное "правило", но это, казалось бы, указало бы на те компании, которые берут код (и кодеры ) серьезно.

32
задан jdehaan 1 November 2009 в 21:41
поделиться

4 ответа

Вы можете передать StringBuilder как char * .

Посмотрите http://pinvoke.net , чтобы проверить, нет ли там подписи для функции.

13
ответ дан 27 November 2019 в 20:20
поделиться

Это зависит от того, что вы хотите сделать. Когда вы вызываете функцию Win32 через PInvoke, вы должны иметь возможность просто передать переменную String; структура упорядочивает все за вас. Если вам нужно что-то более сложное, посмотрите Marshal.StringToHGlobalAnsi и другие методы класса Marshal .

4
ответ дан 27 November 2019 в 20:20
поделиться

Вы можете получить массив byte [] из строки, используя Encoding.ASCII.GetBytes. Вероятно, это можно преобразовать в char * с помощью фиксированного оператора в C #. (Это закрепляет выделенную память, не позволяя gc перемещать ее - тогда вы можете создать на нее указатель.)

Так что мой ответ - да, только если вам удастся преобразовать байт * в char *. (в C / C ++ это не будет проблемой, но я не уверен насчет C #)

PS> Я опубликую код позже, если найду закладку к статье об этом. Я знаю, что это где-то есть ..

0
ответ дан 27 November 2019 в 20:20
поделиться

Чтобы объединить 2 уже заданных ответа, это зависит от направления, которое вам нужно для вашего параметра.

Если функции нужна только входная строка, то есть const char * , вы можете использовать аргумент типа System.String (или обычную строку ).

Если функция заполняет строку, то есть char * buffer, int bufferSize , вы можете передать System.Text.StringBuilder .

В обоих случаях (авто- ) Маршалинг сделает за вас необходимые преобразования.

4
ответ дан 27 November 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: