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

Этот вопрос может стать хитрым.

Сценарий:

Я использую IDE под названием Team Developer 6.1. У него есть собственный язык программирования под названием Gupta / Centura. Теперь, поскольку у меня нет другого шанса сделать это по-другому, я должен использовать элемент RTF-Control, чтобы получить немного удобства в графическом интерфейсе.

Чего я хочу добиться, так это отправить электронное письмо, но его содержимое в формате RTF, и мне нужно преобразовать его в HTML.

В любом случае... Я связываю DLL с именем doxlib.dll, внутри есть две функции, которые я хочу использовать.

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

_DoxStringConvert (преобразует rtf-контент в html-контент)

Я нашел в Интернете кое-что, что помогло мне запустить первый проект.

Наконец-то третий пост отсюда заработал!

Вторая функция сводит меня с ума, потому что я не получаю вывода, и я не знаю, почему. Я думаю, это как-то связано с output length buffer. Кроме того, функция все время возвращает 0, но в примерах она должна возвращать какое-то число... на самом деле есть момент, когда я не могу прочитать третий ответ :D

Кто-нибудь знает, как это будет выглядеть на C++ if третий ответ будет преобразован из 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, я только пишу имя и говорю центуре, каковы параметры, например. Возвращает логическое значение и параметр 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 еще в версии 5.0. Вам нужно использовать SalGetBufferLength() для лучших результатов. SalGetBufferLength() Получает количество байтов, используемых буфером для хранения указанной строки.   -  person Steve Leighton    schedule 18.01.2019
comment
Для справки, языком программирования Team Developer 6.1 IDE является «SAL» — язык приложений SQLWindows, а не «Gupta» или «Centura». «Гупта» — это компания, которая поддерживает IDE. «Центура» выпускала только одну версию IDE, и это была v1.5. Почему люди продолжают называть его Centura. Centura прекратила свое существование примерно в 1995 году, но «Gupta» теперь является частью OpenText, а TeamDeveloper теперь работает на версии 7.1, с поддержкой .Net и платформой UNICODE. Помните об этом при работе со строками.   -  person Steve Leighton    schedule 18.01.2019


Ответы (1)


Вы используете TD6.1, который является UNICODE. SalStrGetBufferLength() устарела из-за перехода Team Developer с ANSI на Unicode еще в версии 5.0. Вам нужно использовать SalGetBufferLength() для лучших результатов.

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

Также при вызове любой внешней функции из TeamDeveloper необходимо выделять память под любые строки с помощью SalSetBufferLength, т.е.

bOk = SalSetBufferLength(sTargetStr, nBuffLength)

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

в вашем случае вызовите SalSetBufferLength(sInput, nnn) вызовите SalSetBufferLength(sOutput, nnn), затем установите nLen = _DoxStringConvert(....

person Steve Leighton    schedule 18.01.2019