Forth http://www.fforum.winglion.ru/ |
|
Quark.dll + Visual C# http://www.fforum.winglion.ru/viewtopic.php?f=23&t=2835 |
Страница 1 из 2 |
Автор: | incubus370 [ Вс апр 08, 2012 19:48 ] |
Заголовок сообщения: | Quark.dll + Visual C# |
Вопрос как подключить Quark.dll к С#. Самостоятельные попытки ни кчему не привели (горы ошибок и ничего больше) |
Автор: | Hishnik [ Вс апр 08, 2012 20:08 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Оно хотя бы выполняет Init() без ошибок? |
Автор: | Antender [ Вс апр 08, 2012 21:51 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
csc не поддерживает fastcall(т.е. регистр). Спрашивающий не знает английский и/или как работают вызовы dll. |
Автор: | Hishnik [ Вс апр 08, 2012 22:45 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Там параметр нужен только для Evaluate. Сама функция Evaluate реализована с регистровой конвенцией, а для передачи согласно C-calls есть функция EvaluateC. |
Автор: | Hishnik [ Вс апр 08, 2012 23:17 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Вот что у меня получилось. На форме есть текстовая строка, кнопка и метка. Думаю, положить их туда не проблема. Код: using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; // вот это я добавил, покопавшись по справке namespace WindowsFormsApplication1 { public partial class Form1 : Form { [DllImport("quark.dll", EntryPoint = "Init")] public static extern void Init(); [DllImport("quark.dll", EntryPoint = "EvaluateC")] public static extern int EvaluateC(string str); public Form1() { InitializeComponent(); Init(); } private void button1_Click(object sender, EventArgs e) { if (EvaluateC(textBox1.Text) == 0) label1.Text = "Ok"; else label1.Text = "Error"; } } } |
Автор: | incubus370 [ Пн апр 09, 2012 07:18 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Хищник писал(а): Вот что у меня получилось. На форме есть текстовая строка, кнопка и метка. Думаю, положить их туда не проблема. Код: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; // вот это я добавил, покопавшись по справке namespace WindowsFormsApplication1 { public partial class Form1 : Form { [DllImport("quark.dll", EntryPoint = "Init")] public static extern void Init(); [DllImport("quark.dll", EntryPoint = "EvaluateC")] public static extern int EvaluateC(string str); public Form1() { InitializeComponent(); Init(); } private void button1_Click(object sender, EventArgs e) { if (EvaluateC(textBox1.Text) == 0) label1.Text = "Ok"; else label1.Text = "Error"; } } } Хищник так в руководстве по quark'у нет ничего про EvaluateC. Init проходит и с ним проблем нет. Проблемы возникают при передаче строки. PS. Antender, в руководстве по quark'у для особо одаренных написано, что используется fastcall вызов процедур с передачей параметра в EAX. так что учи английский сам. |
Автор: | Hishnik [ Пн апр 09, 2012 08:29 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
incubus370 писал(а): Хищник так в руководстве по quark'у нет ничего про EvaluateC. Хм... может быть, старая версия документации? Проблема с передачей параметров уже обсуждалась на форуме, после этого и была добавлена версия EvaluateC. По крайней мере, приведенный фрагмент что-то там выполняет Что - не проверял, проверял код ошибки после EvaluateC. На вменяемых строках, как положено, дает 0, на asdfgh дает ошибку. |
Автор: | diver [ Пн апр 09, 2012 08:30 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
incubus370, уровень +1, опыт +5 |
Автор: | Antender [ Пн апр 09, 2012 12:26 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
incubus370 писал(а): PS. Antender, в руководстве по quark'у для особо одаренных написано, что используется fastcall вызов процедур с передачей параметра в EAX. так что учи английский сам. Английский нужен не для чтения манов от хищника на русском , в которых не было ничего про EvaluateC, а для MSDN в котором чёрным по белому написано, что fastcall не поддерживается! С cdecl конечно проблем нет. |
Автор: | Hishnik [ Пн апр 09, 2012 13:05 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Я уже проверил, оно работает с EvaluateC. Считает, оставляет на стеке что нужно. Правда, графический экран вытаскивается наружу прямо-таки с черепашьей скоростью (ср. с OpenGL). |
Автор: | incubus370 [ Ср апр 11, 2012 05:13 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Хищник писал(а): incubus370 писал(а): Хищник так в руководстве по quark'у нет ничего про EvaluateC. Хм... может быть, старая версия документации? Проблема с передачей параметров уже обсуждалась на форуме, после этого и была добавлена версия EvaluateC. По крайней мере, приведенный фрагмент что-то там выполняет Что - не проверял, проверял код ошибки после EvaluateC. На вменяемых строках, как положено, дает 0, на asdfgh дает ошибку. У меня руководство по 28 билду. В нем про EvaluateC к сожалению ничего не упоминалось. Взял его я у forther'a. |
Автор: | incubus370 [ Ср апр 11, 2012 05:18 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Хищник писал(а): Я уже проверил, оно работает с EvaluateC. Считает, оставляет на стеке что нужно. Правда, графический экран вытаскивается наружу прямо-таки с черепашьей скоростью (ср. с OpenGL). По умолчанию при вызове EvaluateC окно OpenGL обязано появиться или нет? Я лично его не заметил. |
Автор: | Hishnik [ Ср апр 11, 2012 08:30 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
incubus370 писал(а): По умолчанию при вызове EvaluateC окно OpenGL обязано появиться или нет? Я лично его не заметил. В dll оно никак не появится. quark.dll - это не приложение, а библиотека, она предоставляет ресурсы, но никаких элементов управления не создает. Расчет на то, что такие элементы есть в вызывающем приложении. |
Автор: | incubus370 [ Сб апр 14, 2012 11:22 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
Если осуществить подключение библиотеки в нескольких потоках, и в каждом из них работать с библиотекой индивидуально т. е. есть кусок следующий кусок кода есть в кажом потоке Init(); Evaluate(); Done(); то для кажого из потоков библиотека будет ли представлять свой терминал/консоль? |
Автор: | Hishnik [ Сб апр 14, 2012 11:51 ] |
Заголовок сообщения: | Re: Quark.dll + Visual C# |
incubus370 писал(а): Если осуществить подключение библиотеки в нескольких потоках, и в каждом из них работать с библиотекой индивидуально т. е. есть кусок следующий кусок кода есть в кажом потоке Init(); Evaluate(); Done(); то для кажого из потоков библиотека будет ли представлять свой терминал/консоль? Да, каждый раз Init() выделит свои области памяти для кода и данных через GlobalAlloc. Будет несколько независимых форт-машин. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |