powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / С++ & _VFP
15 сообщений из 15, страница 1 из 1
С++ & _VFP
    #32502902
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как из С++ получить указатель на интерфейс OLE сервера _VFP ?
...
Рейтинг: 0 / 0
С++ & _VFP
    #32502936
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как и все остальные com-объекты
#import (тут фокс typelib)
и объявляешь параметр в методе как IDispatch*, а в самом методе делаешь преобразование к _VfpApplicationPtr .
Давно это было, точный код уже потерял.
...
Рейтинг: 0 / 0
С++ & _VFP
    #32503985
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Crip :
фокс typelib - файл какой ? что-то я всю систему облазил , но ни tlb ни оdl ни нашел, который бы хоть како-то говорил что это фоксовский ?
...
Рейтинг: 0 / 0
С++ & _VFP
    #32503999
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл?
Да вроде vfpXr.dll
...
Рейтинг: 0 / 0
С++ & _VFP
    #32504026
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
...
Рейтинг: 0 / 0
С++ & _VFP
    #32514270
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То Crip:

Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
HRESULT hr = OleInitialize(NULL);
CLSID clsid;
wchar_t progid[] = L"VisualFoxPro.Application";
hr = ::CLSIDFromProgID(progid, &clsid);
IDispatch* pIDispatch = NULL;
hr = ::CoCreateInstance(clsid, NULL, LOCALE_USER_DEFAULT,IID_IDispatch, (void**)&pIDispatch);
DISPID dispid;
OLECHAR FAR* name = L"DoCmd";
pIDispatch->GetIDsOfNames(IID_NULL,&name, 1 ,LOCALE_USER_DEFAULT,&dispid); <- Ошибка
Еще до заполнения DISPPARAMS и вызова функции через pIDispatch->Invoke(...)
Все "рушится". Где я накосячил ?
...
Рейтинг: 0 / 0
С++ & _VFP
    #32515448
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафиг вам Dispatch. У меня через него и не получалось. У Фокса есть родные методы Eval и DoCmd
...
Рейтинг: 0 / 0
С++ & _VFP
    #32515449
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное невнятно ответил. Это принимать параметр (_Vfp) в методе С++ нужно как IDispatch. Всю работу нужно ввести через интерфейс _VfpApplication
...
Рейтинг: 0 / 0
С++ & _VFP
    #32515727
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял тебя.
Попробую так. Сразу не допетрил.
Странно что не получается работа через pIDispatch->Invoke(...), мучался -мучался, бросил. Решил попробовать через интелектуальные смарт-указатели
Получилось так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#import "vfr8r.dll" rename_namespace("VFPLib")
void DoVFPFunc ()
{
using namespace 	VFPLib;
VFPLib::ApplicationPtr VFPobj;
VFPobj.CreateInstance(L"VFPobj.Application");
CComBSTR cmdVFP("Допустимая команда VFP");
VFPobj->DoCmd(_bstr_t(cmdVFP)); <- тут ругается,
}
Еще есть пара вопросов, в утилите MS OLE View в качетсве сервера выступает
VFP8.exe и IDL там из него тащит утилита. Ставил в #import его, таже ситуация, ругается, причем ругается на переопределнный опреатор () типа _bstr_t, а без этой обертки команду в метод не протолкнуть.
Как-то же можно это сделать без передачи в качетсве параметра _VFP, а заиметь IDispatch самому и выполнять методы объекта.
...
Рейтинг: 0 / 0
С++ & _VFP
    #32515741
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще, а если я хочу передать _VFP в FLL, то как его принимать через
ParamBlk FAR *parm ?

Допустим:
Код: plaintext
1.
2.
3.
4.
void FAR SetVfpPtr(ParamBlk FAR *parm) 
{ 
#define p0 (parm->p[ 0 ].val)  
.... <- тут что-то делаем
}
Код: plaintext
1.
2.
FoxInfo myFoxInfo[] = {
	{"SetVfpPtr"      ,(FPFI)  SetVfpPtr,       1 ,"I" <- тут какой тип параметра ?       }, 
}
...
Рейтинг: 0 / 0
С++ & _VFP
    #32515788
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В fll можно передавать тип 'O'

Код: plaintext
1.
2.
FoxInfo myFoxInfo[] = {
   {"SetVfpPtr",  (FPFI) SetVfpPtr,   1 , "O"}
}
...
Рейтинг: 0 / 0
С++ & _VFP
    #32517261
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передать-то можно, только это будет не IDispatch, а объект фокса.
Я тут попробовал, передавать нужно SYS(3095,_vfp) - указатель на IDispatch объекта, а в FLL принимать как Integer. Потом соответственно приводить к (IDispatch *) типу.
IDispatch знаю, но интерфейсов-то я не вижу пока. Как теперь
получить указатель на интерфейс Application(кстати там не только этот интрфейс есть) описанный в IDL фокса ?
Имеется также typelib фокса. Как теперь все это собрать в кучу для получения
указателя на интерфейс , что-то я не догоню.
...
Рейтинг: 0 / 0
С++ & _VFP
    #32533085
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С инициализацией и вызовом разобрался. Схема примерно такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include ...
#import "vfp8.exe" rename_namespace("VFPLib")

int _tmain(int argc, _TCHAR* argv[])
    {
           using namespace VFPLib; 
	ApplicationPtr pmyclassvfp;
	CoInitialize( 0 ); 
	pmyclassvfp.CreateInstance(L"VisualFoxPro.Application");
            _bstr_t res;
	CComBSTR VFPCommand("RUN ping www.ru"); // Для примера пропинговать сетку из VFP
	pmyclassvfp->DoCmd(_bstr_t(VFPCommand));
	res = pmyclassvfp->DefaultFilePath;
	pmyclassvfp->Release();
             CoUninitialize(); 
	return  0 ;
}
Хотелось бы теперь узнать , а если я написал СOM DLL на VFP, как мне выполнить метод OLE Server"a. Методы VisualFoxpro.Allication видны и их можно выполнить. А подход к выполнению
кода СOM DLL VFP такой же ? И кстати, почему-то с
#import "vfp8.exe" rename_namespace("VFPLib") работает, а с
#import "vfp8r.dll" rename_namespace("VFPLib") не работает(что было бы предпочтительней), при попытке указать: using namespace VFPLib; - ругается что такого не обнаружено. Хотя vfp8r.tli и vfp8r.tlh созданы.
...
Рейтинг: 0 / 0
С++ & _VFP
    #32533508
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще-то com dll использует vfp8t.dll
...
Рейтинг: 0 / 0
С++ & _VFP
    #32533880
ноль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То Сrip:
Спасибо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / С++ & _VFP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]