Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-34570
KA-87
2003-04-22 21:31
2003.05.12
Нужны компоненты...


3-34348
grinboy
2003-04-22 13:53
2003.05.12
Проблема с отображением данных!


1-34503
Демон
2003-04-29 22:42
2003.05.12
Работа с изображением


14-34610
Ренат
2003-04-24 15:50
2003.05.12
Кнопка power на клавиатуре


1-34451
Петр
2003-04-25 05:53
2003.05.12
Проблема с DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский