Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Здравствуйте, у меня есть библиотека в которой есть функция принимающая строковой параметр. Какой тип мне следует использовать в MS VC++ 6.0 для того чтобы с программы на ST можно было передать строку в функцию?
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Для теста пишу значение параметра функции в файл из длл и потом смотрю, имеем только одну первую букву и все.
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Интересно получается, попробывал писать в файл 20 первых позиций параметра функции в длл, и в файле увидел что после каждого символа стоит пустой символ, поэтому строка и состояла из одного символа (т.к пустой символ в си это конец строки). Приходится выдергивать каждый четный символ чтобы склеить нормальную строку, но ведь это нехорошо, может чего не так делаю? В проекте TM параметры типа String не указатели. В длл параметры объявлены следующим образом: char param[] как всегда при работе со строками. Пробывал через указатели тоже самое.
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Проблемус пустыми символами решил путем их удаления в самой библиотеке (конечно это плохо, былобы хорошо еслибы строки передавались нормально). В итоге функция заработала, но обнаружилась такая особенность: Если в программе на ST откуда вызывается функция из DLL (в качестве параметров принимает строковой тип) написать MyFunc("lalala", "tralala") то все конструкции стоящие и после и до вызова функции вообще не обрабатываются (просто не выполняются и все тут ) а если вызывать так: a := "lalala"; b := "tralala"; MyFunc(a, b); то все отлично, все работает Обясните мне, может я что нитак делаю? Или это так задуманно как и с пустыми символами
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В ТМ6 все строки имеют формат UNICODE - Вам это необходимо учесть в своей DLL, тогда не будет вышеописанных проблем.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Здравствуйте. Создаю пустой проект в нем программу. Далее в разделе "Внешнии библиотеки" добавляю библиотеку, добавляю функцию и в поле "Тип возвращаемого значения" указываю char, нажимаю F7 получаю синтаксическую ошибку. Так как мне сделать так чтобы я мог нормально принять значение типа char от внешней функции? Например функция такая: extern "C" __declspec(dllexport) char __cdecl MyFunc() { return 'C'; } как мне получить это самое "C" в программе на ST? P.S. работаю в релизе 6.04 в старых тоже такое было.
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701