Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
ВнизПроблема с DLL Найти похожие ветки
← →
Петр (2003-04-28 10:44) [40]А если использовать Variant?
← →
evvcom (2003-04-28 10:45) [41]А Variant и вовсе никто кроме дельфи не поймет.
← →
Digitman (2003-04-28 10:57) [42]
> Петр
почитай в док-ции по FoxPro, каков там синтаксис вызова внешних процедур для явной передачи параметров по ссылке, и передавай стр.параметры именно по ссылке, а не по значению.
← →
Петр (2003-04-28 11:12) [43]Размышляя над данной проблемой пришел к таким выводам:
Если дело в String"ах, то должно ли это означать, что DLL совсем нельзя загрузить в Fox"е? Может ли проблема быть в некорректной компиляции DLL? (или параметры компоновки), может быть существуют параметры компилятора, влияющие на использование DLL, созданных в Delphi, в других средах.
К вопросу о использовании PChar:
Входными параметрами к моим функциям на данный момент является String. Программист, который пишет на Fox"e передаст в нее переменную, в которой строка. Не вызовет ли это исключительную ситуацию в моей программе? Каким образом воспримет моя функция такую передачу, т.е. какой тип данных она определит для себя?
← →
Digitman (2003-04-28 11:24) [44]
> Если дело в String"ах, то должно ли это означать, что DLL
> совсем нельзя загрузить в Fox"е?
Нет, не должно. Отказ от String (и в Fox и в Делфи) в пользу простых указательных типов решает проблему.
> Может ли проблема быть в некорректной компиляции DLL? (или
> параметры компоновки),
Нет здесь проблем никаких. Проблема одна - в понимании того, как и что передается от вызывающего к вызываемому коду, и в межязыковых соглашениях о вызовах.
> К вопросу о использовании PChar:
иные варианты, как правило, приведут к непредсказуемым последствиям.
добейся соглашения с Fox-программистом о том, чтобы он передавал тебе стр.параметры по ссылке
тогда, объявив их у себя как PChar (при stdcall-соглашении о вызове) ты легко решишь проблему
← →
Петр (2003-04-28 11:56) [45]> Digitman
Я поговорил с Fox-программистом, он не совсем понял, что означает передача строковых параметров по ссылке (в данном контексте).
К сожалению, я совсем не знаю Fox"a ,но попробую объяснить:
Допустим, он у себя объявит массив
Dim C[15], т.е. массив С из 15 символов, и передаст этот массив на вход моей процедуры, а у меня будет входной параметр tString : PChar;
Получится, что строка, которая содержится в массиве С[15] без проблем запишется в tStirng?
← →
Digitman (2003-04-28 12:18) [46]
> Я поговорил с Fox-программистом, он не совсем понял, что
> означает передача строковых параметров по ссылке
Fox-программист вообще в состоянии документацию к своему инструменту читать ? Ну ведь есть же мануал, в котором описывается синтаксис объявления параметров внешних ф-ций ! Там же, наверняка, есть что-то похожее на ByRef/ByVal. И, скорей всего, какие-то комментарии есть по каждой такой конструкции.
В любом случае, тебе нужно задать вопрос о соглашениях Fox (при вызове внешних ф-ций) не здесь, а фоксовикам в "Базы данных"
> Dim C[15],
а разве это - строковая переменная ?? это же - переменная типа массив !!
> Получится, что строка, которая содержится в массиве С[15]
> без проблем запишется в tStirng: PChar ?
Глубоко сомневаюсь в этом.
← →
evvcom (2003-04-28 14:07) [47]> Digitman © (28.04.03 12:18)
> Петр ©
Может и прокатит Dim C[15]. В Паскале тоже есть array[0..14] of Char и на него с легкостью можно ссылаться как к PChar. Только заканчиваться такая строка должна символом с кодом 0. Или передавать в ином случае реальное количество символов.
← →
Digitman (2003-04-28 14:15) [48]
> evvcom
гадать на кофейной гуще можно сколько угодно)
при наличии определенных знаний можно и без документации выяснить, что в реальности передает Фокс в том или ином случае...
но, к сож., ни автор ни его Фокс-коллега такими знаниями не обладают..
а по поводу "В Паскале тоже есть array[0..14] of Char" скажу лишь, что не следует сравнивать яз.среды разных типов - компилирующие и интерпретирующие... в последних все переменные - динамические, в то время как упомянутая конструкция Паскаля резервирует статическую область памяти
← →
ErikIvanov (2003-04-28 14:22) [49]Незнаю как в новом FoxPro под windows, но в старом до 2.5 нельзя было загружать обычную Dll. Но можно было создовать модули на WatCom C в спецальном формате. После мелкософт прикуил FoxPro и сделал версию под Windows. Наверника предусмотрел загрузку dll. И сделл это наверно стандартно использовав готовый код. Значить при передаче параметров любым способом их можно прочесть! Значить можно попробовать сделать небольшой тест. Передой в Fox один параметр. И ShareMem разумеется убери.
← →
evvcom (2003-04-28 14:25) [50]
> Digitman © (28.04.03 14:15)
> гадать на кофейной гуще можно сколько угодно
Полностью согласен.
← →
Digitman (2003-04-28 14:35) [51]
> Наверника предусмотрел загрузку dll
И наверняка - есть документация ! Которая предназначена для чтения, а не для покрытия пылью)
← →
Anatoly Podgoretsky (2003-04-28 14:41) [52]Digitman © (28.04.03 14:15)
А еще добавлю, приходилось разбираться с Фоксом, там вообще нет переменных, есть структура в 56 байт - дескриптор, в которой содержится все необходимое, включая тип, имя, описание и прочее.
И все это хорошо документировано, включая связь с другими языками и библиотеками.
← →
Digitman (2003-04-28 14:56) [53]
> Anatoly Podgoretsky
> там вообще нет переменных
ну так, думаю, тоже говорить нельзя)
переменная в любой языковой среде прогр-я всегда останется переменной, а по поводу того, как это представлено в памяти - разумеется, в интерпретирующих средах динамически распределяемые структуры данных всегда описываются дескрипторами ! иначе - как без дескрипторов организовать хотя бы те же неявные преобразования типов ?
← →
Петр (2003-04-29 09:01) [54]Случилось событие !!! Написал я наконец DLL, в Fox"e работает и воспринимает мои функции.
Решение оказалось простым (DigitMan"у особое спасибо): вместо входных и выходных параметров String заменил на PChar.
В Fox"e на вход моих функций предается String, а на выходе в своих функциях DLL я возвращаю PChar. По крайней мере реализация такого варианта прошла без ошибок.
СПАСИБО ВСЕМ, КТО ПРИНЯЛ УЧАСТИЕ В ОБСУЖДЕНИИ ДАННОГО ВОПРОСА
С уважением,
Петр.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.008 c