Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Как это будет выглядет на VIP 6.X
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Как это будет выглядет на VIP 6.X - 05.10.2005, 18:08

Код:
class CConfigService{
public:
    virtual CString IBDir()=0;
    virtual CString BinDir()=0;
    virtual CDocument* OpenFile(CString path)=0;
    virtual bool AddConfigTab(CString name,HICON hIcon,CRuntimeClass* pRTCDoc,CRuntimeClass* pRTCView)=0;
    virtual void AddConfigEventHandler(WORD wEventType,void* pHandler)=0;
};
Ответить с цитированием
  (#2 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Похоже это неразрешимая задача - 06.10.2005, 17:01

По всей видимости на VIP такое не сделаешь.
Ответить с цитированием
  (#3 (permalink)) Старый
Сергей Пеньков Сергей Пеньков вне форума
Member
 
Сообщений: 351
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.06.2003
По умолчанию 07.10.2005, 00:04

Ясный перец, что такого "художества" на VIP не сделаешь.
Вот только вопрос - а зачем и что в этом такого фантастического и причем тут VIP?
Так же можно и про QBASIC вспомнить - он тоже многого чего не может. Кстати, не пытались на QBASIC форуме спросить?
Ну а если по делу - причем тут VIP-то? Только для того, чтобы сказать, что на нем это нельзя или нужно позарез что-то сделать и имеено таким образом?
Ответить с цитированием
  (#4 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию Re: Как это будет выглядет на VIP 6.X - 07.10.2005, 11:21

Цитата:
Originally posted by HeiHeShang
[b]
Код:
class CConfigService{
public:
    virtual CString IBDir()=0;
    virtual CString BinDir()=0;
    virtual CDocument* OpenFile(CString path)=0;
    virtual bool AddConfigTab(CString name,HICON hIcon,CRuntimeClass* pRTCDoc,CRuntimeClass* pRTCView)=0;
    virtual void AddConfigEventHandler(WORD wEventType,void* pHandler)=0;
};
Цитата:
По всей видимости на VIP такое не сделаешь
В такой постановке трудно даже предположить что Вам надо.
Например, я могу предположить, что Вам нужна поддержка обращения COM-объекта к главному приложению, написанному на VIP к какому-то интерфейсу в COM-стиле .
Ответить с цитированием
  (#5 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Все гораздо проще. - 07.10.2005, 16:22

Я пишу DLL. В эту DLL передается указатель именно на такой класс, но так как отладить dll не могу, то хочу спросить у знающих людей, как мне описать этот класс на VIP , првильно ли я это сделал. Может я неправильно его реализовал на VIP поэтому и не могу преобразовать правильно указатель и вызвать методы класса.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию Re: Все гораздо проще. - 07.10.2005, 18:03

Цитата:
Originally posted by HeiHeShang+-->
Цитата:
Я пишу DLL. В эту DLL передается указатель именно на такой класс, но так как отладить dll не могу, то хочу спросить у знающих людей, как мне описать этот класс на VIP...
Мы обсудили это с Юрием Ильиным.
Сначала давайте уточним Вашу идею. Мы поняли это так:

Какая-то программа на С++ вызывает Вашу VIP-DLL и каким-то образом передает ей указатель на C++ класс CConfigService, который содержит эти методы. Теперь Ваша VIP-DLL, имея этот указатель, должна иметь возможность вызывать методы этого C++ класса.

Так?

<!--QuoteBegin-HeiHeShang

[b]правильно ли я это сделал. Может я неправильно его реализовал на VIP поэтому и не могу преобразовать правильно указатель и вызвать методы класса.
К сожалению мы пока не знаем что Вы сделали, соответственно, правильно ли Вы это сделали.

Пока мы видим, что в этом классе есть MFC-типы. Поэтому есть первое опасение, что в лоб этот контакт не установить, т.к. VIP (как, впрочем и Delphi). не знает ничего об MFC .
Ответить с цитированием
  (#7 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Правильно поняли. - 08.10.2005, 13:04

Вы все правильно поняли. Я сделал так.
Код:
interface cConfigService
    open core
domains
 wnd = (core::hwnd ) procedure (i) language stdcall.    
predicates    
    iBDir : () -> pointer   procedure language stdcall.
    binDir : () -> pointer procedure language stdcall.
    openFile : (pointer Path) -> pointer procedure (i) language stdcall.
    addConfigTab : (string Name,unsigned HIcon,pointer PRTCDoc,pointer     PRTCView) -> integer procedure (i,i,i,i) language stdcall.
    addConfigEventHandler : (unsigned WEventType,wnd  PHandler)  procedure (i,i) language stdcall.

end interface cConfigService
Меня мучает один вопрос, если это невозможно, то как хоть отладить DLL , например в Delphi можно запустить приложение которое использует мою DLL на отладку, а на VIP такое возможно ?
Ответить с цитированием
  (#8 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию Re: Правильно поняли. - 10.10.2005, 18:40

Цитата:
Originally posted by HeiHeShang
[b]Вы все правильно поняли. Я сделал так.
Код:
interface cConfigService
    open core
domains
 wnd = (core::hwnd ) procedure (i) language stdcall.    
predicates    
    iBDir : () -> pointer   procedure language stdcall.
    binDir : () -> pointer procedure language stdcall.
    openFile : (pointer Path) -> pointer procedure (i) language stdcall.
    addConfigTab : (string Name,unsigned HIcon,pointer PRTCDoc,pointer     PRTCView) -> integer procedure (i,i,i,i) language stdcall.
    addConfigEventHandler : (unsigned WEventType,wnd  PHandler)  procedure (i,i) language stdcall.

end interface cConfigService

Мы с Юрием опять пообсуждали (я дилетант в C++) и схематично решение выглядит таким образом (мы не знаем, как Вы будете разбираться с указателями на объекты MFC классов):

Интерфейс должен быть немного изменен (тип stdcall -> c) для предикатов

Код:
interface cConfigService
    open core
domains
 wnd = (core::hwnd ) procedure (i) language stdcall.    
predicates    
    iBDir : () -> pointer   procedure language с.
    binDir : () -> pointer procedure language с.
    openFile : (pointer Path) -> pointer procedure (i) language с.
    addConfigTab : (string Name,unsigned HIcon,pointer PRTCDoc,pointer     PRTCView) -> integer procedure (i,i,i,i) language с.
    addConfigEventHandler : (unsigned WEventType,wnd  PHandler)  procedure (i,i) language с.

end interface cConfigService
Предположим, Вам для взаимных обращений внутри DLL достаточно иметь некоторый статический класс someClass

Код:
сlass someClass

predicates
  setPointer:(pointer CConfigServicePointer). 
predicates
  getBDir : () -> string. 
  ...
  addConfigEventHandler : (...) .

end class someClass

implement someClass

class facts
cConfigServicePointer_V:cConfigService:=erroneous. 

clauses
  setPointer(Pointer):=
     cConfigServicePointer_V:=uncheckedConvert(cConfigService,Pointer).

clauses
  getBDir()=BdirName:-
     DirectoryNameObjectPointer=cConfigServicePointer_V:iBDir(),
%                  уж не знаю как Вы воспользуетесь этим
%                  DirectoryNameObjectPointer для получения
%                  строки BdirName, поскольку 
%                  DirectoryNameObjectPointer - это указатель на объект
        …

end implement someClass
Цитата:
Меня мучает один вопрос, если это невозможно, то как хоть отладить DLL , например в Delphi можно запустить приложение которое использует мою DLL на отладку, а на VIP такое возможно ?
Да, возможно. Для этого надо в Project/Settings/RunOptions/"Executable for Debugger" указать Вашу исполняемую программу, а когда Debugger попросит указать проект, указать ему на проект вашей DLL.
Ответить с цитированием
  (#9 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Не получается отладить. - 11.10.2005, 05:06

Делаю как вы пишете для отладки dll, при запуске точка останова становится неактивной, может не правильно распалагаю проект ? Может еще какие-то настройки надо выставить для компилятора.
Ответить с цитированием
  (#10 (permalink)) Старый
Сергей Пеньков Сергей Пеньков вне форума
Member
 
Сообщений: 351
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.06.2003
По умолчанию 11.10.2005, 06:20

Поскольку решаемая задача - разовая, не проще ли сделать заплатку в виде DLL, которая, получив данные из основной программы, организует их передачу в C++ модуль.
Я не о том, что VIP нельзя состыковать с C++ - просто время, потраченное на такое исследование лучше использовать на что-то другое.
Это в том случае, когда нужно просто чтобы работало.
Другой вопрос - красота или эстетика. Кое-кого мутит от того, что данные между программами передаются через файл. Меня от этого не мутит, особенно если это работает. Да и к тому же - отлаживать такие куски не представляет особого труда.
Я думаю, что когда станет ясно, что что-то не получается, а делать действительно нужно - решение в виде заплатки может пригодиться.
Это особенно важно в случае, когда за работу платят деньги. Если работает - то платят.
Ответить с цитированием
  (#11 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Я не стороник такого подхода. - 11.10.2005, 13:26

Может на этапе создания прототипа и подойдет, а вот коммерческую версию выпускать, с передачей через файлики не очень хочется, тем более что и не получится.
Ответить с цитированием
  (#12 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию Re: Не получается отладить. - 11.10.2005, 13:47

Цитата:
Originally posted by HeiHeShang
[b]Делаю как вы пишете для отладки dll, при запуске точка останова становится неактивной, может не правильно распалагаю проект ? Может еще какие-то настройки надо выставить для компилятора.
Должно бы работать, но, к сожалению, выявилась наведенная ошибка.
В ближайшее время будет сделан Patch к версии 6.3, где это снова заработает. Спасибо за тестовую ситуацию.
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию Re: Не получается отладить. - 11.10.2005, 13:49

Цитата:
Originally posted by HeiHeShang
[b]Делаю как вы пишете для отладки dll, при запуске точка останова становится неактивной, может не правильно распалагаю проект ? Может еще какие-то настройки надо выставить для компилятора.
Если есть возможность, пока можно попробовать отладку через Visual Studio. Не очень удобно, но в качестве горячего решения может помочь.
Ответить с цитированием
  (#14 (permalink)) Старый
HeiHeShang HeiHeShang вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.03.2005
По умолчанию Спасибо добрые люди. - 11.10.2005, 16:36

Все время на мне. Как только пытаюсь что то написать на VIP так что то и не идет.
Ответить с цитированием
  (#15 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,906
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 11.10.2005, 16:40

HeiHeShang пишет:
Цитата:
Может на этапе создания прототипа и подойдет, а вот коммерческую версию выпускать, с передачей через файлики не очень хочется, тем более что и не получится.
Лично я всегда обмениваюсь через буфер обмена (клип-борд): и винт не пилиться, и скорость высокая.
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Blu Ray читать будет? f17 Периферия 3 17.01.2012 22:31
Будет ли 120Гц? RITSU Мониторы 2 20.12.2011 21:30
будет ли все нормально??? Пархоменко Вадим Память 3 22.08.2011 14:17
Будет ли работать?) Lifehacker Подбор комплектующих 1 29.06.2011 22:06
Будет ли работать? Lucky Системный блок 9 04.06.2011 13:55
Будет ли работать? Петька Системный блок 14 09.02.2011 15:59
Что будет лучше? IVladJ Любые вопросы от новичков 7 05.11.2010 14:41
Будет ли работать ? витёк Оценка конфигурации 0 04.10.2010 18:14
Будет ли это работать ? и если будет то как ? Александр3 Любые вопросы от новичков 3 22.09.2010 19:21
что будет если..... Redrik Shuhart Моддинг 4 28.02.2009 22:57
Netscape'а не будет! Кошмар Новости 0 29.12.2007 22:58



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов