powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подключение к внешней dll .NET/c#
8 сообщений из 8, страница 1 из 1
Подключение к внешней dll .NET/c#
    #39589611
11cergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Необходимо реализовать получение сообщений из RabbitMQ в FoxPro

Используется:
Visual FoxPro 6.
Windows 7 x64
VS 2015

Для подключения тестирую компоненту для .Net Framework. Она имеет com-интерфейс
проект https://github.com/rabbitmq/rabbitmq-dotnet-client
Для сборки использована версия проекта rabbitmq-dotnet-client-rabbitmq_v3_7_0_milestone6
В свойствах проекта VisualStudio 2015 установил признак: "Register for COM interop"

Скомпилировал библиотеку RabbitMQ.Client.dll

Регистрация с использованием regasm.exe успешно проходит (все типы зарегистрированы)

Но никак не удается вызвать зарегистрированную библиотеку RabbitMQ.Client.dll из FoxPro

local RQ
SET OLEOBJECT ON

RQ = createObject('RabbitMQ.Client')

При создании объекта ошибка поиска класса (class definition is not found)


Пробовал создать тестовый проект http://aakinshin.net/ru/blog/post/wrap-cs-in-com/
Fox так же не видит dll

Есть ли возможность использования .dll на С# в FoxPro?
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39589647
11cergeyВ свойствах проекта VisualStudio 2015 установил признак: "Register for COM interop"

Скомпилировал библиотеку RabbitMQ.Client.dllС какаой разрядностью целевой платформы? Надеюсь, Win32?Но никак не удается вызвать зарегистрированную библиотеку RabbitMQ.Client.dll из FoxProИ не получится.
При создании объекта ошибка поиска класса (class definition is not found)Сие сообщение выдается при отсутствии в реестре винды записи о реализованном вашей dll СОМ интерфейсе. 32-битном, а не абы каком.

Пробовал создать тестовый проект http://aakinshin.net/ru/blog/post/wrap-cs-in-com/
Fox так же не видит dllРазумеется. Ибо смотрит не dll, а запись в реестре.
Есть ли возможность использования .dll на С# в FoxPro?Технология СОМ разработана как раз для устранения этой самой зависимости от языка/инструмента создания компонентов.
Короче, проверяйте наличие регистрации в реестре вашей компоненты.
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39589742
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11cergey Есть ли возможность использования .dll на С# в FoxPro?
Rick неплохо описал как это можно сделать в своей статье

Happy reading!
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39589966
11cergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь, получилось создать объект, ошибка была в обращении
RQ = createObject('RabbitMQ.Client')

Необходимый класс имеет имя: RabbitMQ.Client.ConnectionFactory

Теперь есть 2 проблемы
1. В С# используется переменная DeliveryTag, тип ulong. При возврате значения в FoxPro ошибка "function argument value, type, or count is invalid"
Возможно ли преобразовать?

2. Как в FP раскодировать массив байтов mes = result.body в строку

класс в C#
Код: plaintext
1.
2.
3.
4.
public class BasicGetResult
    {
        public BasicGetResult(ulong deliveryTag, bool redelivered, string exchange,
            string routingKey, uint messageCount, IBasicProperties basicProperties, byte[] body)
        {
Код FP
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Local RMQ, factory, con, channel, noAck, result, mes, DeliveryTag

factory = CreateObject("RabbitMQ.Client.ConnectionFactory")

factory.UserName 		= ""
factory.Password 		= ""
factory.VirtualHost 	        = "/"
factory.HostName 	        = ""
factory.Port 			= ""

con 		= factory.CreateConnection()
channel 	= con.CreateModel()

noAck = .F.
result = channel.BasicGet("rq.foxpro", noAck)


IF IsNull(result)
	con.Close()
else
	mes = result.body
	DeliveryTag = result.deliveryTag
	
	channel.BasicAck(DeliveryTag, .F.)

	con.Close()
endif
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39590359
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11cergey,
Не до конца ясно, что требуется.
Только получать сообщения?
Тогда однозначно, делать в шарпе.
Сделать новый метод, специально для фокса, возвращающий ясные для него типы.

Ну и как вариант, делать обмен, через какой то 3й продукт.
(БД например)
PS Удивлен что хоть что то заработало. Когда то пытался их скрестить, понаписал фигни, кое как ползало. Бросил. Не очень надо было.
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39590378
11cergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdor, необходимо получать сообщения в Fox с отправкой подтверждения Ask о получении после записи в таблицы FP

по поводу методов, не хотел изменять исходный проект, т.к. не работал с C#, но видимо других вариантов нет

1. Основная проблема с преобразованием типа ulong, в Fox как я понимаю аналога нет
2. Парсинг массива body (сообщение из RQ) можно сделать через вызов метода своей dll
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39590423
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не путаю: аналога ulong C# в фоксе нет, это 64 бита целое беззнаковое. В фоксе только INTEGER это - 32 бита со знаком.

Как вариант изворачиваться со строками, т.е. в фоксе объявляешь как string и подсовываешь туда строку в 8 символов.
...
Рейтинг: 0 / 0
Подключение к внешней dll .NET/c#
    #39590575
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11cergeyнеобходимо получать сообщения в Fox с отправкой подтверждения
Так отправка то работает?

11cergeyне хотел изменять исходный проект, т.к. не работал с C#
Вот и будет повод поучиться)

Хотя возможно прокатит предложение Dima T (String)

В самом шарпе, может оказаться все, ну очень просто
На вскидку.
Объявляешь новый класс
Код: c#
1.
2.
3.
4.
5.
public class BasicGetResult4VFP
    {
        public BasicGetResult(string deliveryTag, bool redelivered, string exchange,
            string routingKey, uint messageCount, IBasicProperties basicProperties, byte[] body)
        {


И создаешь метод, который будешь звать из фокса.
А этот метод, сначала вызывает родной метод, потом, преобразует BasicGetResult в BasicGetResult4VFP и возвращает понятную фоксу структуру.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подключение к внешней dll .NET/c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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