This is topic Функции из внешней DLL in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/33/t/000024.html

Posted by Майборода Алексей (Участник № / Member № 1701) on :
 
Здравствуйте, у меня есть библиотека в которой есть функция принимающая строковой параметр. Какой тип мне следует использовать в 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") то все конструкции стоящие и после и до вызова функции вообще не обрабатываются (просто не выполняются и все тут [Недоумение / Confused] ) а если вызывать так:
a := "lalala";
b := "tralala";
MyFunc(a, b);
то все отлично, все работает [Недоумение / Confused] [Недоумение / Confused] [Недоумение / Confused]
Обясните мне, может я что нитак делаю? Или это так задуманно как и с пустыми символами [Улыбка / Smile]
 
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 :
 
В этой ветке стоит ждать ответа?
Или у всех отпуск... [Улыбка / Smile]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Отпуск будет.
Но ответ есть. Это наша ошибка. Будем править.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2