![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интерфейс объекта VisualFoxPro.Application в составе vfpXr.dll
Сергей М. © (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;