Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2010, 17:33   #1
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию Программа и MathCAD

пишу программы на С++,часто возникает ситуации,когда изначально в программу нельзя забить формулу(ну для примера: Реализовывал метод Свенна,ничего сложного,но необходимо заранее забить функцию,например y=sin(x),x!=0;y=1,x==0...) Хочется связать MathCad с программой,чтобы пользователь вводил формулу в Маткаде,потом программа посылала значение х в Маткад,Маткад вернул значение у..Как мне это сделать?.. Возможность такая должна быть... Парсить формулы бессмысленно,да и парсер не проще прикрутить,чем маткад..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 19.02.2010, 20:05   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Поищи вот эту книгу (или какое-то из её более ранних изданий, посвящённых более старым (13,...8,..) версиям; там только цифры в названии менялись). Ну и в документации наверняка должно быть (в MATLAB'е отдельный документ mixed-language-программированию посвящён).

Ну и, может, всё-таки, идею парсера
http://www.codeproject.com/KB/recipe...athParser.aspx
http://www.codeproject.com/KB/recipe...athParser.aspx
пока не отбрасывать?...
Vago вне форума Ответить с цитированием
Старый 19.02.2010, 23:01   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Ну насчет парсеров я думал и не раз,но вот какая штука,на мой взгляд это занятие муторное и неблагодарное,особенно когда вся документация на английском языке(всю жизнь учил испанский,да и тот хромает). Да и если будет дана система уравнений,то еще необходимо будет писать и свой парсер,чтобы проверять условия...Конечно,если бы я выложил исходники и мне кто-нибудь помог вставить туда парсер(чтобы у меня был образец),тогда все кажется проще.Но это же никто не сделает,правильно?).. Поэтому налажу связь программы и маткада и вместо того,чтобы вызывать функцию double f(double x),буду передавать х в маткад...Выглядит более реально..))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 19.02.2010, 23:08   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...оно конечно на delphi... но важен сам принцип, через ole.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 20.02.2010, 00:01   #5
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Хмм...пока не понятно...вот она запустила Маткад
Код:
 ShellExecute(Application.Handle,'open','mathcad.exe',nil,nil,SW_HIDE);
Энто можно сделать через CreateProcessA..далее..нашла окно..вот и суть,да?
Код:
OLEContainer:=TOLEContainer.Create(Application);
    OLEContainer.Parent:=Panel1;
    OLEContainer.CreateObjectFromFile(ExtractFilePath(Application.ExeName)+mcdFileName,false);
    OLEContainer.DoVerb(OVPrimary);
    mcdDoc:=OLEContainer.OleObject;
    mcdDoc.ReCalculate;
    mcdDoc.GetComplex('Z1',I0,EmptyParam);

    mcdDoc.GetComplex('data1',data1,EmptyParam);
    mcdDoc.GetComplex('data2',data2,EmptyParam);
    mcdDoc.GetComplex('data3',data3,EmptyParam);
    mcdDoc.GetComplex('data4',data4,EmptyParam);
    mcdDoc.GetComplex('data5',data5,EmptyParam);
    mcdDoc.GetComplex('data6',data6,EmptyParam);
    mcdDoc.GetComplex('data7',data7,EmptyParam);

    mcdDoc.GetComplex('data0',data0,EmptyParam);
    OLEContainer.Close;
Не очень ясно пока,надо почитать...рыскал по гуглу встретил вот это.Умные люди,нид бэкап,я не тупой,я только учусь))..Где же найти описательную часть,мануал или алгоритм запроса-ответа...
З.Ы.С OLE вроде все понятно,но в примере,который я нашел подключали #include <Mathcad_TLB.h>,надо ли её подключать,или просто создать контейнер и все...Контейнер же делает доступными все функции типа "SetComplex"?..
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 20.02.2010 в 00:34.
Скарам вне форума Ответить с цитированием
Старый 20.02.2010, 01:06   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...думаю для начала попробовать импортировать интерфейсы либы mathcad.dll... по-поводу мануала с api самому интересно.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.02.2010, 20:22   #7
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Смог добавить в проект
Код:
#include "Mathcad_OCX.h"
#include "Mathcad_TLB.h"
Описываю как делал,создал проект(использую Borland Developer Studio 2006).Зашел в Component->Import Component->Import a type Library->Mathcad Automation 1.0 Type Library (Version 1.0) и Mathcad Automation API (Version 1.0),добавил в проект.В основном юнете подключил все новые юниты(через use unit)..
Но дальше что делать не понятно,здесь написано,что можно создать,например,объект IMathcadWorksheet,но когда пишешь
Код:
IMathcadWorksheet w;
Он говорит синтаксическая ошибка. Может я опять фигню сделал?..
З.Ы.Ввот пример: Создаю IMathcad McdDoc;,пишет
Цитата:
[C++ Error] Unit4.cpp(18): E2352 Cannot create instance of abstract class 'IMathcad'
[C++ Error] Unit4.cpp(18): E2353 Class 'IMathcad' is abstract because of '__stdcall IMathcad::Recalculate(long *) = 0'
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 21.02.2010 в 20:27.
Скарам вне форума Ответить с цитированием
Старый 21.02.2010, 21:27   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...попробуйте через тип variant
Код:
 variant w, ww;
 olevariant re, im;

 w = CreateOleObject("mathcad.auto");
 w.Open("1.mcd"); // должон быть в наличии
 ww:= w.ActiveDocument;
 ww.GetComplex("in0", re, im);

 re = 100;
 im = 0;
 ww.SetComplex("in0", re, im);
 ww.Recalculate;
...еще, у мя версия mcad2000
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.02.2010, 21:37   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Код:
IMathcadWorksheet w;
Он говорит синтаксическая ошибка. Может я опять фигню сделал?..
З.Ы.Ввот пример: Создаю IMathcad McdDoc;,пишет
Нельзя создавать объекты абстрактных классов, только указатели
Код:
IMathcadWorksheet* w;
netrino вне форума Ответить с цитированием
Старый 22.02.2010, 00:03   #10
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

To raxp,у типа variant нет метода open,я пробовал похожие варанты-и через OleFunction,OleProcedure и так можно продолжать очень долго,обычно вываливается ошибка на стадии выполнения программы с сообщением Неизвестное имя функции или такое действие не поддерживается..
To netrino,теперь создается,даже стали доступны методы класса GetValue и прочие..теперь осталось разобраться как от OleContainer1->CreateObjectFromFile( "c:\\funcion.xmcd", False ); перейти к этому классу.Здесь есть пример на делфи,в котором они от объекта переходят к MC.Worksheets...Какой аналог у Worksheets в С++?Просмотрел все,что предлагает OleContainer1-> и OleContainer1->OleObject, там такой строки нет(...В принципе после этого перехода думаю,что все проблемы решаться...(
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MathCad werser Помощь студентам 1 14.12.2009 18:01
MathCAD+интерфейс e-bosh Помощь студентам 0 01.12.2009 17:07
MATHCAD HECTOR.A. Помощь студентам 3 08.03.2009 20:21
MathCad madshizik Microsoft Office Excel 2 10.10.2008 18:36