Преобразуването на RTF 2 HTML чрез DLL не работи

Този въпрос може да стане сложен.

Сценарий:

Използвам IDE, наречена Team Developer 6.1. Той има собствен език за програмиране, наречен Gupta / Centura. Сега, тъй като нямам друг шанс да го направя по друг начин, трябва да използвам RTF-Control елемент, за да получа малко използваемост в GUI.

Това, което искам да постигна, е да изпратя имейл, но съдържанието е в RTF и трябва да го конвертирам в HTML.

Както и да е... Обвързвам DLL, наречен doxlib.dll, вътре има 2 функции, които искам да използвам.

_DoxConvert (преобразува rtf-файл в html-файл)

_DoxStringConvert (преобразува rtf-съдържание в html-съдържание)

Намерих нещо в интернет, което ми помогна да стартирам първия.

Най-накрая третата публикация оттук го пусна!

Втората функция ме подлудява, защото не получавам резултат и не знам защо. Предполагам, че това има нещо общо с output length buffer. Освен това функцията връща 0 през цялото време, но в примерите трябва да връща някакво число... всъщност това е моята точка, в която не мога да прочета третият отговор :D

Някой има ли идея как би изглеждало това в C++ ако третият отговор ще се трансформира от autoit в c++?

В момента обаждането ми изглежда като (Centura)

Function:  ConvertToHTML
Parameter: String sInput
           String sOutput

Set nLen = _DoxStringConvert( sInput , SalStrGetBufferLength( sInput ), sOutput, SalStrGetBufferLength( sOutput), DOX_IN_RTF|DOX_OUT_HTML )

Примерно обаждане:

Call ConvertToHTML( "my string", output_var )

Но това нещо с дължината на изхода ми изглежда толкова грешно ^^


person Dwza    schedule 30.05.2015    source източник
comment
Какво е SalStrLength()? Очаквах да видя нещо като Set nLen = _DoxStringConvert( sInput , sOutput, DOX_IN_RTF|DOX_OUT_HTML )   -  person Blas Soriano    schedule 30.05.2015
comment
Това ми дава дължината на низа на дадения низ в центури. Току-що го промених на SalStrGetBufferLength( sInput ), тъй като разбрах, че нямам нужда от дължината. Но все още нямам резултат.   -  person Dwza    schedule 30.05.2015
comment
В примера от вашата връзка виждам $len = _DoxStringConvert($InBuff, $OutBuff, BitOr($DOX_IN_HTML,$DOX_OUT_RTF),$hDoxlibDll) и вътре в тази функция тези дължини се изчисляват като Local $iInLength = StringLen($sInBuffer) и Local $iOutLength = StringLen($sOutBuffer)   -  person Blas Soriano    schedule 30.05.2015
comment
Знам :) Източникът, който публикувах, е като този. (Нещо като във функцията) и не го изчислявам преди повикване, изчислявам го по време на повикване   -  person Dwza    schedule 30.05.2015
comment
След това, ако сте написали свой собствен _DoxStringConvert() може би трябва да видим това, за да открием възможна грешка.   -  person Blas Soriano    schedule 30.05.2015
comment
Ето защо казах, че този въпрос може да стане труден. За да обвържа DLL, пиша само името и казвам на centura какви са параметрите, напр. Връщане на булево значение и параметър String, String и т.н. Функцията е като Edited. Няма възможност да го публикувате като реална функция... скапаният му център :/ но там е написана програмата, върху която работя.   -  person Dwza    schedule 30.05.2015
comment
Нека продължим тази дискусия в чата.   -  person Dwza    schedule 30.05.2015
comment
Преди да използвате думи като "скапания" Centura - уверете се, че проблемът не е във вас. 0 Вие използвате TD6.1, който е UNICODE. SalStrGetBufferLength() беше отхвърлен поради преминаването на Team Developer от ANSI към Unicode обратно във v5.0. Трябва да използвате SalGetBufferLength() за по-добри резултати. SalGetBufferLength() Получава броя байтове, използвани от буфера за съхраняване на определен низ.   -  person Steve Leighton    schedule 18.01.2019
comment
За протокола езикът за програмиране Team Developer 6.1 IDE е „SAL“ – SQLWindows Application Language, а не „Gupta“ или „Centura“. „Gupta“ е компанията, която поддържа IDE. „Centura“ е пуснала само една версия на IDE и това е v1.5. Защо хората продължават да го наричат ​​Centura. Centura не съществуваше около 1995 г., но „Gupta“ вече е част от OpenText и TeamDeveloper сега работи на v7.1, активиран е .Net и UNICODE платформа. Помнете това, когато работите с низове.   -  person Steve Leighton    schedule 18.01.2019


Отговори (1)


Вие използвате TD6.1, който е UNICODE. SalStrGetBufferLength() беше отхвърлен поради преминаването на Team Developer от ANSI към Unicode обратно във v5.0. Трябва да използвате SalGetBufferLength() за по-добри резултати.

SalGetBufferLength() Получава броя байтове, използвани от буфера за съхраняване на определен низ.

Също така, когато извиквате която и да е външна функция от TeamDeveloper, трябва да разпределите памет за всички низове, като използвате SalSetBufferLength, т.е.

bOk = SalSetBufferLength(sTargetStr, nBuffLength)

Задава броя байтове, използвани от буфера за съхраняване на определен низ.

във вашия случай Извикайте SalSetBufferLength( sInput, nnn) Извикайте SalSetBufferLength( sOutput, nnn) след това Задайте nLen = _DoxStringConvert(....

person Steve Leighton    schedule 18.01.2019