Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интерфейс объекта VisualFoxPro.Application в составе vfpXr.dll


Страницы:   1 2 3

Сергей М. ©   (2007-04-23 11:49:00) 

Как получить программный доступ к этому интерфейсу, имея? r ghbvthe? доступ к интерфейсу объекта VisualFoxPro.Runtime ?


Сергей М.   (2007-04-28 16:57:00) [21]


> sniknik ©   (28.04.07 15:24) [21]


SET COLLATE TO "чегого-то там"- да, есть такая. Но причем здесь сортировка?


> либо устанавливать в строке конекта, что тебе судя по всему
> не пойдет


Именно в т.н. "строке коннекта" оно бы и подошло. Точнее, не в строке коннекта, а в указанном мной фокс-скрипте, автоматически выполняемом при коннекте к COM-серверу FoxApplication.


sniknik   (2007-04-28 15:30:00) [22]

> что придется потенциально "править" это добро.
ну что за люди... а? ему говоришь, есть возможностьменять т.к. с исходниками, он понимает что ему придется"править". т.е. достоинство "легким движением пера" превращается в недостаток... с чего решил что придется? я разве это говорил?


sniknik   (2007-04-28 15:24:00) [23]

> Судя по молчанию, "бывалые фоксовики" то ли на Канарах, то ли отсутствуют как класс ?)
они давно стали "бывшими фоксовиками"...

и кстати, многие движки не обращают внимания на байт кодировки в таблице... (исторически сложилось, в первых версиях его попросту не было) поэтому ты легко можеш получить таблицу в которое "e" (винда, ansi вроде) стоит, а фактически данные в OEM DOS. или наоборот. в итоге "правильные" движки четко следующие байту исковеркают данные до неузнаваемости... поэтому есть внешние приоритетные параметры. в фоксе вроде есть sql команда меняющая кодировку типа SET COLLATE TO MACHINE (либо устанавливать в строке конекта, что тебе судя по всему не пойдет)


Сергей М.   (2007-04-28 14:42:00) [24]

Судя по молчанию, "бывалые фоксовики" то ли на Канарах, то ли отсутствуют как класс ?)


Сергей М.   (2007-04-28 13:54:00) [25]

Решил пока остановиться на варианте связки "FoxOLEDataSet+foxauto+vfpXruntime" и потестировать, благо отучить автора FoxOLEDataSet от жадности - один байт в его коде подправить)

Дышать-то она дышит, но проблема с кодировкой - интересующие DBF сверстаны в cp866.

Фоксовик из меня никакой, посему прошу бывалых фоксовиков подсказать, где и что надо "ковырнуть"..


Сергей М.   (2007-04-24 13:56:00) [26]


> umbra ©   (24.04.07 13:12) [17]
>
> в foxauto.dll, если я не ошибаюсь, ф-ция GetClass


> из vfp6r.dll вызываются сначала DllOleInit


Хм ..

А вот фриварная фоксовая утилитка DBFPacker, по сведениям ее предвар.трассировки мной, вызывает DllOleInit лишь единожды перед самым завершением своей работы.


> один из которых - имя какого-то файла


К примеру, в случае с тем же DBFPacker'ом это полный путь к DBFPacker.exe ..


umbra   (2007-04-24 13:12:00) [27]

в foxauto.dll, если я не ошибаюсь, ф-ция GetClassObject определена как

HRESULT __stdcall DllGetClassObject(const CLSID *const rclsid,const IID *const riid,LPVOID *ppv)

В ней из vfp6r.dll вызываются сначала DllOleInit с тремя параметрами (один из которых - имя какого-то файла, с двумя остальными еще не разобрался), а затем VFPGetClassObject c rclsid, riid и ppv в качестве параметров


Сергей М.   (2007-04-24 11:25:00) [28]


> sniknik ©   (24.04.07 10:51) [15]


> можеш исправить .. он с исходниками на дельфе


Цитата с дом.страницы:

Price: $100.00 US    Complete source code is included in the purchase price.

Это мне никак не подходит, тем более при условии, что придется потенциально "править" это добро.


> не нравится "быстрость" пользуйся непосредственно фоксом,
>  никто быстрее его с его таблицами/индексами не работает


Так ведь я о фоксе (точнее - о его ран-тайм-движке) речь и веду в первую очередь !


sniknik   (2007-04-24 10:51:00) [29]

Halcyon - ом пользовался когдато... не для CDX правда, для клиперных индексов, но поддержка CDX тоже есть.
не нравится "корректность" можеш исправить, он с исходниками на дельфе (один раз приходилось, но не изза Halcyon-а, две версии клипера почемуто делали различные индексы на одинаковом выражении, пришлось подстраиваться)
не нравится "быстрость" пользуйся непосредственно фоксом, никто быстрее его с его таблицами/индексами не работает.


Сергей М.   (2007-04-24 10:24:00) [30]

Хорошо, поставим вопрос так - какими "движками" (если не vfp run-time) можно воспользоваться для быстрой и корректной реиндексации фоксовых таблиц с CDX-индексами ?


Сергей М.   (2007-04-23 14:07:00) [31]


> Попытки создать объект VisualFoxPro.Runtime (из vfp6r.dll)
> приводит к сообщению "интерфейс не поддерживается", хотя
> библиотека есть в реестре


Разумеется, не поддерживается !
Ибо объект VisualFoxPro.Runtime не реализует IDispatch.

В том-то и состоит вопрос.


> автор FoxDSet вычислил это условие и написал загрузчик для
> vfp6r.dll в виде своей foxauto.dll


Все верно.

Вот меня как раз и интересует, как, по аналогии с foxauto.dll, грамотно воспользоваться ф-циями DllWinMain и DllOleInit с этой целью ..


umbra   (2007-04-23 14:00:00) [32]

виноват, нашелся экзешник фокспро на компьютере. И вышеприведенный код работает только когда этот экзешник зарегистрирован.
Попытки создать объект VisualFoxPro.Runtime (из vfp6r.dll) приводит к сообщению "интерфейс не поддерживается", хотя библиотека есть в реестре. Это наводит на мысль, что при создании объекта требуется некое условие, которое не выполняется, если вызов идет из стороннего приложения. А автор FoxDSet вычислил это условие и написал загрузчик для vfp6r.dll в виде своей foxauto.dll.


Сергей М.   (2007-04-23 13:39:00) [33]

Вот регистрационная инф-ция в моемслучае.

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ 008B6021-1F3D-11D1-B0C8-00A0C9055D74}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{008B6021-1F3D-11D1-B0C8-00A0C9055D74}\InProcServer32]
@="C:\\WINDOWS\\system32\\ VFP6R.DLL"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{008B6021-1F3D-11D1-B0C8-00A0C9055D74}\ProgId]
@="VisualFoxpro.Runtime.6"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{008B6021-1F3D-11D1-B0C8-00A0C9055D74}\VersionIndependentProgId]
@="VisualFoxpro. Runtime"



Как видишь, никаких VisualFoxPro.Application не наблюдается.

Чем твоя vfp6r.dll отличается от моей, если твоя регистрирует этот объект, а моя нет ?

Уверен что ничем)


Сергей М.   (2007-04-23 13:13:00) [34]


> umbra ©   (23.04.07 13:06) [8]


Если так, то приведи, пож., всезаписи в реестре, имеющие отношение к зарегистрированному при этом классу VisualFoxPro.Application ...


Сергей М.   (2007-04-23 13:08:00) [35]


> Какую ошибку выдает?


Ту же самую, которая выдается при запросе на создание любого объекта, имя класса которого не фигурирует в реестре.


umbra   (2007-04-23 13:06:00) [36]

собственно, самого фокспро у меня нет, но в в папке system нашлась vfp6r.dll, я ее зарегистрировал, и приведенный код показал мне окошко среды фокспро.


Сергей М.   (2007-04-23 13:05:00) [37]


> А у меня работает


Потому что у тебя, очевидно, инсталлирована сама среда разработки.
А у меня не инсталлирована.
И автор FoxDSet'а (см. [3]) тоже не требует инсталляции среды, для работы его софта необходимо лишь наличие рантайм-библиотеки из состава среды. Мало того, FoxDSet не требует даже регистрации рантайм-библиотеки в реестре.


umbra   (2007-04-23 12:59:00) [38]

гм. А у меня работает. Какую ошибку выдает?


Сергей М.   (2007-04-23 12:55:00) [39]


> umbra ©   (23.04.07 12:52) [4]


Конечно не работает)
Иначе и вопроса бы ни было.


umbra   (2007-04-23 12:52:00) [40]

а такое не работает разве?

procedure TForm1.Button1Click(Sender: TObject);
var
 vfp: Variant;
begin
 vfp := CreateOleObject('VisualFoxPro.Application');
 vfp.Visible := True;
end;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо