This is topic Функции из внешней DLL in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Здравствуйте, у меня есть библиотека в которой есть функция принимающая строковой параметр. Какой тип мне следует использовать в MS VC++ 6.0 для того чтобы с программы на ST можно было передать строку в функцию?
Posted by Майборода Алексей (Участник № / Member № 1701) on :
Для теста пишу значение параметра функции в файл из длл и потом смотрю, имеем только одну первую букву и все.
Posted by Майборода Алексей (Участник № / Member № 1701) on :
Интересно получается, попробывал писать в файл 20 первых позиций параметра функции в длл, и в файле увидел что после каждого символа стоит пустой символ, поэтому строка и состояла из одного символа (т.к пустой символ в си это конец строки). Приходится выдергивать каждый четный символ чтобы склеить нормальную строку, но ведь это нехорошо, может чего не так делаю? В проекте TM параметры типа String не указатели. В длл параметры объявлены следующим образом: char param[] как всегда при работе со строками. Пробывал через указатели тоже самое.
Posted by Майборода Алексей (Участник № / Member № 1701) on :
Проблемус пустыми символами решил путем их удаления в самой библиотеке (конечно это плохо, былобы хорошо еслибы строки передавались нормально). В итоге функция заработала, но обнаружилась такая особенность: Если в программе на ST откуда вызывается функция из DLL (в качестве параметров принимает строковой тип) написать MyFunc("lalala", "tralala") то все конструкции стоящие и после и до вызова функции вообще не обрабатываются (просто не выполняются и все тут ) а если вызывать так: a := "lalala"; b := "tralala"; MyFunc(a, b); то все отлично, все работает Обясните мне, может я что нитак делаю? Или это так задуманно как и с пустыми символами
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В ТМ6 все строки имеют формат UNICODE - Вам это необходимо учесть в своей DLL, тогда не будет вышеописанных проблем.
Posted by Майборода Алексей (Участник № / Member № 1701) on :
Здравствуйте. Создаю пустой проект в нем программу. Далее в разделе "Внешнии библиотеки" добавляю библиотеку, добавляю функцию и в поле "Тип возвращаемого значения" указываю char, нажимаю F7 получаю синтаксическую ошибку. Так как мне сделать так чтобы я мог нормально принять значение типа char от внешней функции? Например функция такая: extern "C" __declspec(dllexport) char __cdecl MyFunc() { return 'C'; } как мне получить это самое "C" в программе на ST? P.S. работаю в релизе 6.04 в старых тоже такое было.
Posted by Майборода Алексей (Участник № / Member № 1701) on :
В этой ветке стоит ждать ответа? Или у всех отпуск...
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Отпуск будет. Но ответ есть. Это наша ошибка. Будем править.