OpenMaple

Форум пользователей пакета Maple

Модератор: Admin

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

OpenMaple

Сообщение masjanin » Ср дек 21, 2005 4:29 pm

Вопрос правда можно задать на другом форуме, но он имеет прямое отношение к maple.
Я С ни фига не знаю, но нацарапал кое как следующее (вся соль в последней процедуре):

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "iostream.h"
#include "maplec.h"
#include "H2.h"
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved){return TRUE;}

MKernelVector kv;
char StringResult[1024]="argentina";
EXPORT void M_DECL textCallBack( void *data, int tag, char *output )
{
int i=0;
while (*output!='\0'){
StringResult[i]=*output;
output++;
i++;
}
}

EXPORT BOOL CALLBACK LoadMaple(void)
{
char err[2048];

MCallBackVectorDesc cb = {textCallBack,0,0,0,0,0,0,0};

char *x[6];
*x="maple";


if( (kv=StartMaple(1,x,&cb,NULL,NULL,err)) == NULL ) {
return (FALSE);
}
else
{
return TRUE;
}
}

EXPORT void CALLBACK TerminateMaple(void)
{
StopMaple(kv);
}

EXPORT char* CALLBACK MapleExec(char* statement)
{
MessageBox(NULL,statement,"Function from DLL",MB_OK);
EvalMapleStatement(kv,&statement[0]);
return(&StringResult[0]);
}


Так вот это все я пихаю в dll и хочу из Delphi (7 у меня) воспользоваться процедурами.
Получается инициализировать maple, остановить его, но как только вызываю MapleExec
начинаются проблемки.
мессаджбокс должен выкидывать строку, которую я передаю из delphi, например
"limit(sin(x)/x,x=0);"
он выбает кракозяблики. Я использую тип PChar для передачи параметра.
Хотя из C я спокойно вызываю MapleExec и мапл дает ответ.
Че то там с указателями. Не туда куда то он ссылается в памяти. Подскажите люди че делать?

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Ср дек 21, 2005 5:53 pm

Проведи эксперимент:
создай библиотеку с Messagebox, которая выводит любую нуль-терминальную строку, передаваемую из Делфи. Все, что связано с Маплом, удали из кода. Если ошибка повторится, то тебе на форум по Делфи, а конкретно по dll. В Королевстве Делфи, например, много примеров на это...

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Пт дек 23, 2005 8:04 pm

Все получилось. А вот по теме вопрос в догонку. Когда вызываю мапл из своей проги он грузится быстро, а картинка с логотипом openmaple висит достаточно долго. Че то она меня уже стала раздражать, т.к. я нахожусь на стадии отладки то мне бы ее вообще не выводить на экран. Есть ли такая возможность?

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Пт дек 23, 2005 9:29 pm

А как можно иметь несколько серверов мапла. У меня многодокументный интерфейс и охота чтобы переменные из разных окон были разделены в мапле. Поддерживает ли мапл в таком режиме?

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Вт дек 27, 2005 6:33 pm

"\" a"; - выдает ошибку:
at offset 5, missing operator or `;`,
хотя в обычном режиме не OpenMaple он это понимает.

в то время как "a"; отвечает: "a".

Что же делать в таком случае?

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Пн янв 02, 2006 5:17 pm

masjanin писал(а):А как можно иметь несколько серверов мапла. У меня многодокументный интерфейс и охота чтобы переменные из разных окон были разделены в мапле. Поддерживает ли мапл в таком режиме?


попробовал даже массив MKernelVector. В справке:
kv=StartMaple(...
я
kv[i]=StartMaple(...
но мапл не хочет грузиться несколько раз. И я могу использовать переменные в разных окнах приложения.

P.S. кто-нибудь использует функции OpenMaple?