Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб дек 16, 2017 01:40

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Quark.dll + Visual C#
СообщениеДобавлено: Вс апр 08, 2012 19:48 
Не в сети

Зарегистрирован: Вс апр 17, 2011 12:28
Сообщения: 34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вопрос как подключить Quark.dll к С#. Самостоятельные попытки ни кчему не привели (горы ошибок и ничего больше)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Вс апр 08, 2012 20:08 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
Оно хотя бы выполняет Init() без ошибок?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Вс апр 08, 2012 21:51 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
csc не поддерживает fastcall(т.е. регистр).
Спрашивающий не знает английский и/или как работают вызовы dll.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Вс апр 08, 2012 22:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
Там параметр нужен только для Evaluate. Сама функция Evaluate реализована с регистровой конвенцией, а для передачи согласно C-calls есть функция EvaluateC.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Вс апр 08, 2012 23:17 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
Вот что у меня получилось. На форме есть текстовая строка, кнопка и метка. Думаю, положить их туда не проблема.

Код:
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";
        }
    }
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Пн апр 09, 2012 07:18 
Не в сети

Зарегистрирован: Вс апр 17, 2011 12:28
Сообщения: 34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Вот что у меня получилось. На форме есть текстовая строка, кнопка и метка. Думаю, положить их туда не проблема.

Код:
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. так что учи английский сам.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Пн апр 09, 2012 08:29 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
incubus370 писал(а):
Хищник так в руководстве по quark'у нет ничего про EvaluateC.

Хм... может быть, старая версия документации? Проблема с передачей параметров уже обсуждалась на форуме, после этого и была добавлена версия EvaluateC. По крайней мере, приведенный фрагмент что-то там выполняет :) Что - не проверял, проверял код ошибки после EvaluateC. На вменяемых строках, как положено, дает 0, на asdfgh дает ошибку.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Пн апр 09, 2012 08:30 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 509
Благодарил (а): 5 раз.
Поблагодарили: 25 раз.
incubus370, уровень +1, опыт +5 :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Пн апр 09, 2012 12:26 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
incubus370 писал(а):
PS. Antender, в руководстве по quark'у для особо одаренных написано, что используется fastcall вызов процедур с передачей параметра в EAX. так что учи английский сам.


Английский нужен не для чтения манов от хищника на русском , в которых не было ничего про EvaluateC, а для MSDN в котором чёрным по белому написано, что fastcall не поддерживается! С cdecl конечно проблем нет.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Пн апр 09, 2012 13:05 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
Я уже проверил, оно работает с EvaluateC. Считает, оставляет на стеке что нужно. Правда, графический экран вытаскивается наружу прямо-таки с черепашьей скоростью (ср. с OpenGL).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Ср апр 11, 2012 05:13 
Не в сети

Зарегистрирован: Вс апр 17, 2011 12:28
Сообщения: 34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
incubus370 писал(а):
Хищник так в руководстве по quark'у нет ничего про EvaluateC.

Хм... может быть, старая версия документации? Проблема с передачей параметров уже обсуждалась на форуме, после этого и была добавлена версия EvaluateC. По крайней мере, приведенный фрагмент что-то там выполняет :) Что - не проверял, проверял код ошибки после EvaluateC. На вменяемых строках, как положено, дает 0, на asdfgh дает ошибку.


У меня руководство по 28 билду. В нем про EvaluateC к сожалению ничего не упоминалось. Взял его я у forther'a.


Последний раз редактировалось incubus370 Ср апр 11, 2012 05:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Ср апр 11, 2012 05:18 
Не в сети

Зарегистрирован: Вс апр 17, 2011 12:28
Сообщения: 34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Я уже проверил, оно работает с EvaluateC. Считает, оставляет на стеке что нужно. Правда, графический экран вытаскивается наружу прямо-таки с черепашьей скоростью (ср. с OpenGL).


По умолчанию при вызове EvaluateC окно OpenGL обязано появиться или нет? Я лично его не заметил.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Ср апр 11, 2012 08:30 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
incubus370 писал(а):
По умолчанию при вызове EvaluateC окно OpenGL обязано появиться или нет? Я лично его не заметил.

В dll оно никак не появится. quark.dll - это не приложение, а библиотека, она предоставляет ресурсы, но никаких элементов управления не создает. Расчет на то, что такие элементы есть в вызывающем приложении.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Сб апр 14, 2012 11:22 
Не в сети

Зарегистрирован: Вс апр 17, 2011 12:28
Сообщения: 34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Если осуществить подключение библиотеки в нескольких потоках, и в каждом из них работать с библиотекой индивидуально т. е. есть кусок следующий кусок кода есть в кажом потоке

Init();
Evaluate();
Done();

то для кажого из потоков библиотека будет ли представлять свой терминал/консоль?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark.dll + Visual C#
СообщениеДобавлено: Сб апр 14, 2012 11:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6100
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
incubus370 писал(а):
Если осуществить подключение библиотеки в нескольких потоках, и в каждом из них работать с библиотекой индивидуально т. е. есть кусок следующий кусок кода есть в кажом потоке

Init();
Evaluate();
Done();

то для кажого из потоков библиотека будет ли представлять свой терминал/консоль?

Да, каждый раз Init() выделит свои области памяти для кода и данных через GlobalAlloc. Будет несколько независимых форт-машин.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB