Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

Проблема с 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.015 c
1-34405
Maik
2003-04-30 11:57
2003.05.12
Как при работе с FileWrite записать в файл строку


14-34602
Карелин Артем
2003-04-24 13:33
2003.05.12
Уровень излучения сотового телефона.


14-34544
exo
2003-04-22 18:21
2003.05.12
timer


7-34627
SergeyVasiljev
2003-03-18 18:18
2003.05.12
Как послать байт через переходник USB-LPT, при обращении к LPT?


3-34365
Ann
2003-04-22 15:22
2003.05.12
date