|
PB и libcurl
|
|||
---|---|---|---|
#18+
Приветствую всех участников форума! А нет-ли среди уважаемых PB-гуру тех, кто смог подружить PB с библиотекой libcurl (the multiprotocol file transfer library)? Подозреваю, что без PBNI тут не обойтись. Я в C++ не силен, поэтому и лелею надежду, что кто-нибудь из знатоков сможет поделится хотя бы крупицей своих знаний (желательно в исходном коде). PB 11.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 16:01 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63Приветствую всех участников форума! А нет-ли среди уважаемых PB-гуру тех, кто смог подружить PB с библиотекой libcurl (the multiprotocol file transfer library)? Подозреваю, что без PBNI тут не обойтись. Я в C++ не силен, поэтому и лелею надежду, что кто-нибудь из знатоков сможет поделится хотя бы крупицей своих знаний (желательно в исходном коде). PB 11.5 PBNI тут вообще не при чем, скорее всего просто нужно описать прототипы функций из библиотеки. А чем не устраивает функционал Wininet? От него есть уже готовые компоненты с описанием всех функций на PB. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 22:58 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
Работал с этим протоколом только через вызовы bat файлов - если так подойдет - опишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 17:08 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
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, но моих знаний пока не хватает, чтобы понять как это реализовано. Но, думаю не боги горшки обжигают - рано или поздно разберусь. А, может быть, кто-то что-то посоветует и на этом форуме. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 10:34 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63Без PBNI не обойтись: многие (если не все) функции требуют соответствующие функции обратного вызова (callbacks) на С++. Ну так написать тогда обертку к этой функции на чем-нибудь, что с callback'ами работать может и дергать уже свою библиотеку. avs63Насчет других библиотек: глубоко не анализировал. А какая задача вообще решается? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 11:27 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
Локшин Марк Началось все с банальной потребности - как отправить/получить почту по протоколам SMTP/POP на серверах, требующих SSL/TSL защиту (Yandex, GMail). Как можно управлять содержимым почтовых ящиков используя IMAP. Вот и попалась libcurl. авторНу так написать тогда обертку к этой функции на чем-нибудь, что с callback'ами работать может и дергать уже свою библиотеку. Так эта обертка и есть класс на PBNI. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 11:37 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63Началось все с банальной потребности - как отправить/получить почту по протоколам SMTP/POP на серверах, требующих SSL/TSL защиту (Yandex, GMail). Как можно управлять содержимым почтовых ящиков используя IMAP. Вот и попалась libcurl. Не писать это на PB. avs63авторНу так написать тогда обертку к этой функции на чем-нибудь, что с callback'ами работать может и дергать уже свою библиотеку. Так эта обертка и есть класс на PBNI. Реализация кастомного callback'а не означает использование PBNI. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 11:46 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
Локшин Марк авторНе писать это на PB. Так я и не хочу писать то, что УЖЕ написано, и, судя по всему неплохо. Я просто хочу подключить это написанное к PB авторРеализация кастомного callback'а не означает использование PBNI. А какой другой вариант, если не уходить от PB? Я действительно не знаю, если не трудно просветите хотя-бы вкратце. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 12:04 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63А какой другой вариант, если не уходить от PB? Я действительно не знаю, если не трудно просветите хотя-бы вкратце. Написать dll в которой реализовать вызов функции из libcurl и кастомный колбек в ней же. Из PB дергать свою dll. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 20:52 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
Локшин Марк авторНаписать dll в которой реализовать вызов функции из libcurl и кастомный колбек в ней же. Из PB дергать свою dll. А смысл так усложнять архитектуру решения, если все-равно надо использовать C++? Пусть уж тогда это будет реализовано в одном PBNI-классе. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 10:09 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63А смысл так усложнять архитектуру решения, если все-равно надо использовать C++? Пусть уж тогда это будет реализовано в одном PBNI-классе. ну например для того, чтобы функция была законченной, а не лапша, дергаемая в две стороны на разных языках. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 23:38 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63А смысл так усложнять архитектуру решения, если все-равно надо использовать C++? Пусть уж тогда это будет реализовано в одном PBNI-классе. PBNI намного муторнее использовать чем просто DLL. Хотя если не знаком с С/С++ то пофиг )) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 03:02 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
Можете попробовать колбэки прямо в ПБ написать используя это мою библиотеку http://sqlbatch.com/pbinvoke/ Я к сожалению уже не поддерживаю этот проект, но исходники все выложил. Скачайте демку, она из IDE работает бесплатно. Если удастся с демкой получить то что нужно, то потом идете в https://github.com/amoskovsky/pb-pbinvoke и собираете .DLL бесплатной версии из исходников, и получите из демки не-демку )). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 03:09 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 10:37 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63Может подскажете страждующему, что он делает не так. Не, я уже давно этим не занимался - нет идей в чем может быть проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 12:03 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
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; ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 15:04 |
|
PB и libcurl
|
|||
---|---|---|---|
#18+
avs63Правильно ли будет заключить каждую символьную строку в макрос _T()? Я обычно применял макрос TEXT(). Но это вроде синонимы. Код: sql 1. 2. 3. 4. 5.
avs63И второе, как правильно сравнивать строки в UNICODE? Подозреваю, что следующий код (опять же из мануала) предназначен для Multibyte: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 17:57 |
|
|
start [/forum/topic.php?fid=15&msg=39104248&tid=1335233]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
230ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 365ms |
0 / 0 |