powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ООП, Win32 dll, статический метод
4 сообщений из 4, страница 1 из 1
ООП, Win32 dll, статический метод
    #38816010
ДАП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Изучаю C#, ну и по ходу разрабатываю свой проект. Ранее занимался другими технологиями. У кого больше опыта, может подскажете по решению моей проблемы.

Задача такая. Есть внешнее приложение, в частности, терминал для торговли на бирже ММВБ. У этого терминала есть своё API, которое позволяет управлять им, т.е. позволяет программно покупать/продавать различные акции, опционы и т.д. Для работы с этим API есть win32 dll с необходимыми статическими функциями.

В своей программе я создал статический класс, подключил из библиотеки необходимые методы:
Код: c#
1.
2.
3.
4.
5.
static class QuikAPI
    {
        [DllImport("TRANS2QUIK.dll", EntryPoint = "_TRANS2QUIK_CONNECT@16", ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern int TRANS2QUIK_CONNECT(string lpcstrConnectionParamsString, out int pnExtendedErrorCode, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstrErrorMessage, UInt32 dwErrorMessageSize);
...



Всё работет. Проблем нет.

Но я хочу работать одновременно с несколькими торговыми терминалами одновременно, например, чтобы каждый из них торговал на своём персональном лицевом счёте и под своим логином.
Идеально было бы просто создать несколько экземпляров класса, но методы в них статические и работают только с одним терминалом, а именно с первым подключенным.

Наверное, можно было бы сделать "по-колхозному" - положить, допустим 5 библиотек dll с разными именами и создать 5 одинаковых статических классов и работать с ними отдельно. Или можно 5-ти разным(копиям) статическим классам работать с одной dll, но с разными терминалами ? Для сокращения кода может быть можно было бы использовать какие-то шаблоны кода, чтобы не писать несколько одних и тех же классов.

В общем, интересует, как это делается "по-людски" ? Идеально, конечно, создать бы несколько экземпляров одного класса, но методы статические.

В чём-то похожа технология работы с клиентами БД. Например, Oracle. Там же тоже всего один клиент в виде одной библиотеки dll, однако экземпляры разных сессий успешно создаются и работают каждая сама по себе.
...
Рейтинг: 0 / 0
ООП, Win32 dll, статический метод
    #38816019
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДАПВ общем, интересует, как это делается "по-людски" ?
у вас "нечеловеческий" API dll

а потому и решение будет аналогичнвм - на каждый терминал - по процессу

приложение общается с процессами через WCF например
процесс - просто обёртка над кривым API
...
Рейтинг: 0 / 0
ООП, Win32 dll, статический метод
    #38816048
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДАПВ общем, интересует, как это делается "по-людски" ?
у вас "нечеловеческий" API dll

а потому и решение будет аналогичнвм - на каждый терминал - по процессу

приложение общается с процессами через WCF например
процесс - просто обёртка над кривым API
Прям добавить нечего, все как есть.

Могу опытом поделиться: написали WCF-сервис, который дергают клиенты в принципе без ограничений по количеству. Этот сервис по сути диспетчер - ведет некий пул процессов, недоступных извне (по net.pipe) и определяет, нужно ли поднять еще один инстанс обрабатывающего процесса или можно передать на обработку существующему. Типа балансировщика нагрузки. Пришлось извращаться по той же самой причине, что и у вас - вызов неуправляемой dll, которая держала в памяти некие общие данные. Отдельные AppDomain тоже не помогли.

В принципе, если сама либа заточена на использование нескольких коннектов, можно обойтись и без диспетчера, например mtesrl.dll для ММВБ позволяла организовать работу с несколькими серверами и несколькими логинами одновременно
...
Рейтинг: 0 / 0
ООП, Win32 dll, статический метод
    #38816107
ДАП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, буду думать
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ООП, Win32 dll, статический метод
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]