Являются ли MF C CString и LPTSTR взаимозаменяемыми? - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь использовать DLL с компилятором ANSI C. Одна из функций DLL принимает пустой указатель. В некотором примере Windows кода, который был предоставлен с DLL, структура, которая передается функции, определяется как имеющая три объекта CString. Я сказал автору DLL, что они не должны передавать классы MF C через свои функции DLL. Они сказали мне просто заменить объявления CString в структуре на массивы символов, и это должно быть хорошо. Я на 99% уверен, что это неправильно, но так как у меня нет VC ++, и у меня нет опыта работы с MF C, и поскольку я видел некоторые посты, в которых говорится, что LPTSTR можно использовать вместо CString ( Что такое `CString`? ), я начинаю задумываться, не ошибаюсь ли я.

Может ли кто-нибудь подтвердить для меня, что CString и LPTSTR не являются взаимозаменяемыми в качестве аргументов функции? Если вы можете предоставить источник для определения класса CString, это было бы полезно, чтобы я мог отправить его автору DLL и объяснить, что объем памяти массива char не совпадает с классом CString, и вы можете передать указатель на структуру, которая была определена с помощью массивов символов, а затем обработать ее как набор объектов CString.

1 Ответ

0 голосов
/ 16 марта 2020

CString - псевдоним шаблона класса CStringT . Объекты этого класса действительно лучше не передавать в DLL. Тип символа класса строки может быть TCHAR (для строк символов ANSI и Unicode - см. Пояснение ниже). Определение CStringCStringT), скорее всего, можно найти в заголовочном файле atlstr.h.

LPTSTR - это обычный указатель на последовательность символов. Тип данных (TCHAR*) зависит от настроек среды разработки: если выбран параметр «Использовать набор символов Unicode», тип данных TCHAR будет wchar_tLPTSTR будет wchar_t* соответственно). Если выбран «Использовать многобайтовый набор символов», TCHAR будет определен как charLPTSTR будет char*).

Так что вопрос о взаимозаменяемости между CString и LPTSTR не так просто. Это также зависит от того, как написана DLL. Если DLL была разработана с теми же настройками среды, что и основная программа, то CString и LPTSTR действительно могут быть взаимозаменяемыми.

Кроме того, помните, что CStirng - это класс со многими методами, тогда как LPTSTR это просто указатель.

...