powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB и libcurl
18 сообщений из 18, страница 1 из 1
PB и libcurl
    #39099740
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех участников форума!

А нет-ли среди уважаемых PB-гуру тех, кто смог подружить PB с библиотекой libcurl (the multiprotocol file transfer library)?
Подозреваю, что без PBNI тут не обойтись. Я в C++ не силен, поэтому и лелею надежду, что кто-нибудь из знатоков сможет поделится хотя бы крупицей своих знаний (желательно в исходном коде).

PB 11.5
...
Рейтинг: 0 / 0
PB и libcurl
    #39103291
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63Приветствую всех участников форума!

А нет-ли среди уважаемых PB-гуру тех, кто смог подружить PB с библиотекой libcurl (the multiprotocol file transfer library)?
Подозреваю, что без PBNI тут не обойтись. Я в C++ не силен, поэтому и лелею надежду, что кто-нибудь из знатоков сможет поделится хотя бы крупицей своих знаний (желательно в исходном коде).

PB 11.5
PBNI тут вообще не при чем, скорее всего просто нужно описать прототипы функций из библиотеки. А чем не устраивает функционал Wininet? От него есть уже готовые компоненты с описанием всех функций на PB.
...
Рейтинг: 0 / 0
PB и libcurl
    #39103856
Работал с этим протоколом только через вызовы bat файлов - если так подойдет - опишу.
...
Рейтинг: 0 / 0
PB и libcurl
    #39104168
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Локшин Марк

Без PBNI не обойтись: многие (если не все) функции требуют соответствующие функции обратного вызова (callbacks) на С++. Простым импортом внешних функций, насколько мне известно, это не реализуешь в PB, а если такое и заработает, то ввод/вывод, по умолчанию, будет идти только на stdin/sdtout. Использовать внешний curl.exe тоже не хотелось-бы.

Насчет других библиотек: глубоко не анализировал. Просто первое, что выдал Google при поиске Open Source Free SMTP/POP3/IMAP library был curl/libcurl. По функционалу, предлагаемому лицензированию и текущей поддержке меня устроил на все 100. Близкое решение этих задач для PB есть на сайте TOPWIZ . Однако, используемая там библиотека распространяется по лицензии GPL, что для нас не есть good.

А вообще, после небольшого мозгового штурма, что-то уже начало получаться и у меня (именно с PBNI). Единственно, что пока не знаю как реализовать (хотя можно решить менее красиво) - это следующее: хотелось бы автоматически получить в PB классе, полученном на основе PBNI доступ ко всем CURL_ enum-константам. Что-то подобное видел в проекте
libcurl_vb, но моих знаний пока не хватает, чтобы понять как это реализовано. Но, думаю не боги горшки обжигают - рано или поздно разберусь. А, может быть, кто-то что-то посоветует и на этом форуме.
...
Рейтинг: 0 / 0
PB и libcurl
    #39104217
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63Без PBNI не обойтись: многие (если не все) функции требуют соответствующие функции обратного вызова (callbacks) на С++.
Ну так написать тогда обертку к этой функции на чем-нибудь, что с callback'ами работать может и дергать уже свою библиотеку.
avs63Насчет других библиотек: глубоко не анализировал.
А какая задача вообще решается?
...
Рейтинг: 0 / 0
PB и libcurl
    #39104234
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк

Началось все с банальной потребности - как отправить/получить почту по протоколам SMTP/POP на серверах, требующих SSL/TSL защиту (Yandex, GMail). Как можно управлять содержимым почтовых ящиков используя IMAP. Вот и попалась libcurl.

авторНу так написать тогда обертку к этой функции на чем-нибудь, что с callback'ами работать может и дергать уже свою библиотеку.

Так эта обертка и есть класс на PBNI.
...
Рейтинг: 0 / 0
PB и libcurl
    #39104248
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63Началось все с банальной потребности - как отправить/получить почту по протоколам SMTP/POP на серверах, требующих SSL/TSL защиту (Yandex, GMail). Как можно управлять содержимым почтовых ящиков используя IMAP. Вот и попалась libcurl.
Не писать это на PB.
avs63авторНу так написать тогда обертку к этой функции на чем-нибудь, что с callback'ами работать может и дергать уже свою библиотеку.
Так эта обертка и есть класс на PBNI.
Реализация кастомного callback'а не означает использование PBNI.
...
Рейтинг: 0 / 0
PB и libcurl
    #39104286
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк

авторНе писать это на PB.
Так я и не хочу писать то, что УЖЕ написано, и, судя по всему неплохо. Я просто хочу подключить это написанное к PB

авторРеализация кастомного callback'а не означает использование PBNI.
А какой другой вариант, если не уходить от PB? Я действительно не знаю, если не трудно просветите хотя-бы вкратце.
...
Рейтинг: 0 / 0
PB и libcurl
    #39104982
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63А какой другой вариант, если не уходить от PB? Я действительно не знаю, если не трудно просветите хотя-бы вкратце.
Написать dll в которой реализовать вызов функции из libcurl и кастомный колбек в ней же. Из PB дергать свою dll.
...
Рейтинг: 0 / 0
PB и libcurl
    #39105247
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк

авторНаписать dll в которой реализовать вызов функции из libcurl и кастомный колбек в ней же. Из PB дергать свою dll.
А смысл так усложнять архитектуру решения, если все-равно надо использовать C++?
Пусть уж тогда это будет реализовано в одном PBNI-классе.
...
Рейтинг: 0 / 0
PB и libcurl
    #39106080
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63А смысл так усложнять архитектуру решения, если все-равно надо использовать C++?
Пусть уж тогда это будет реализовано в одном PBNI-классе.
ну например для того, чтобы функция была законченной, а не лапша, дергаемая в две стороны на разных языках.
...
Рейтинг: 0 / 0
PB и libcurl
    #39106119
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63А смысл так усложнять архитектуру решения, если все-равно надо использовать C++?
Пусть уж тогда это будет реализовано в одном PBNI-классе.
PBNI намного муторнее использовать чем просто DLL.
Хотя если не знаком с С/С++ то пофиг ))
...
Рейтинг: 0 / 0
PB и libcurl
    #39106121
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете попробовать колбэки прямо в ПБ написать используя это мою библиотеку
http://sqlbatch.com/pbinvoke/
Я к сожалению уже не поддерживаю этот проект, но исходники все выложил.

Скачайте демку, она из IDE работает бесплатно.
Если удастся с демкой получить то что нужно, то потом идете в https://github.com/amoskovsky/pb-pbinvoke и собираете .DLL бесплатной версии из исходников, и получите из демки не-демку )).
...
Рейтинг: 0 / 0
PB и libcurl
    #39106272
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Я, так понял, Вы хорошо разбираетесь в C++. Ваш вариант может быть и хорош, но для меня это слишком круто. Я пытаюсь решить проблему "малой кровью", исходя из имеющихся знаний, хотя их и не много в этой области. Когда-то давно, можно сказать на коленке, прикрутил PBORCA к своему проекту через PBNI. И это до сих пор работает. Вот я и решил воспользоваться этим опытом вновь. И все-бы хорошо, НО...

Что-то я наткнулся на какую-то засаду. В документации на PBNI (11.5) сказано, что компилировать проект надо с директивой препроцессора _UNICODE. В MSVC 2012 (Express, Rus, Update 5) устанавливаю в свойствах проекта тип символов - UNICODE. Собираю. Загружаю в PB. При создании объекта получаю ошибку типа "Не могу создать PBNI объект". Возвращаюсь в MSVC, меняю кодировку символов на Multibyte. Повторяю процесс. Вроде все создается и вызывается. Но под отладчиком в MSVC значения строковых параметров выглядят коряво и в аргументы внешних функций (char *) передаются не верно.

Может подскажете страждующему, что он делает не так.

P.S.:
Windows 7 Pro, 64bit
...
Рейтинг: 0 / 0
PB и libcurl
    #39106414
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63Может подскажете страждующему, что он делает не так.
Не, я уже давно этим не занимался - нет идей в чем может быть проблема.
...
Рейтинг: 0 / 0
PB и libcurl
    #39106750
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Жаль, и все-же рискну задать еще пару вопросов.
В спецификации PBNI есть интерфейсный метод PBX_GetDescription(). Вот пример из документации:
авторPBXEXPORT LPCTSTR PBXCALL PBX_GetDescription()
{
static const TCHAR desc[] = {
// Description begins here
"class ClassOne from NonVisualObject\n"
"function integer objectFunction(integer a[])\n"
"subroutine objectSubroutine(integer ai_ref)\n"
"event integer eventName(integer b)\n"
"end class\n"
// Description ends here
};
return desc;
}

В режиме Multibyte студия компилирует его без проблем, однако последствия я описал выше. В Unicode компилятор выдает ошибку C2440 (если мне память не изменяет) - Не совпадение типов const char[] и TCHAR . Правильно ли будет заключить каждую символьную строку в макрос _T()? Компилятор ругаться перестает, но класс в итоге не работает в PB.

И второе, как правильно сравнивать строки в UNICODE? Подозреваю, что следующий код (опять же из мануала) предназначен для Multibyte:
автор if ( strcmp( className, "classone" ) == 0 )
*nvobj = new ClassOne;
...
Рейтинг: 0 / 0
PB и libcurl
    #39107065
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63Правильно ли будет заключить каждую символьную строку в макрос _T()?
Я обычно применял макрос TEXT(). Но это вроде синонимы.
Код: sql
1.
2.
3.
4.
5.
static const TCHAR desc[] = 
  TEXT("class ClassOne from NonVisualObject\n")
  TEXT("function integer objectFunction(integer a[])\n") 
  ...
  ;



avs63И второе, как правильно сравнивать строки в UNICODE? Подозреваю, что следующий код (опять же из мануала) предназначен для Multibyte:
Код: sql
1.
 if ( _tcscmp( className, TEXT("classone") ) == 0 )
...
Рейтинг: 0 / 0
PB и libcurl
    #39107368
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий,

Спасибо огромное - все заработало. Проблема оказалась именно в сравнении строк.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB и libcurl
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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