C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
BCB6 со справкой CHM
Valery52
Отправлено: 14.02.2007, 10:54


Ученик-кочегар

Группа: Участник
Сообщений: 8



Хочу на BCB6 создать контекстную справку используя файл CHM.
Установил компонент Aktive X Hhopen.ocx в BCB6.
Создал на HTML справочный файл Vvedenie.chm с одним разделом
Vvedenie.
Использовал пример создания справки для Delfi, на делфи все работает.
Вот текст для ВСВ6:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include "HHOPENLib_OCX.h"
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button_Help;
THhopen *Hhopen1;
void __fastcall Button_HelpClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "HHOPENLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button_HelpClick(TObject *Sender)
{
AnsiString HtmlFHlp = "Vvedenie.chm"; // файл справки
AnsiString HtmlTHlp = "Vvedenie"; //раздел справки (имя HTML-файла)
PWideChar pwHelpFile; // файл справки (указатель на строку WideChar)
PWideChar pwHelpTopic;// раздел (указатель на строку WideChar)

// выделить память для строк WideChar
pwHelpFile = new wchar_t[HtmlFHlp.Length() * 2];
pwHelpTopic = new wchar_t[HtmlTHlp.Length() * 2];

// преобразовать Ansi-строку в WideString-строку
pwHelpFile = StringToWideChar(HtmlFHlp, pwHelpFile, MAX_PATH * 2);
pwHelpTopic = StringToWideChar(HtmlTHlp, pwHelpTopic, 32);

// вывести справочную информацию
Hhopen1->OpenHelp(pwHelpFile, pwHelpTopic);
//Закрыть окно
Hhopen1->CloseHelp();
//Освободить память
delete []pwHelpFile;
delete []pwHelpTopic;

}
//---------------------------------------------------------------------------

При сосздании формы справки, происходит зависание, отладчик выдает на экран ассемблерный код.
Пытался скачать с этой ссылки
http://www.bauklimatik-dresden.de/CHAMPS/b...b_material.html руководство, не получается.
Прошу подсказать, где ошибка?
nawok78
Отправлено: 14.02.2007, 12:46


Станционный диспетчер

Группа: Участник
Сообщений: 115



я так понимаю 1 символ занимает 2 байта?
CODE

// выделить память для строк WideChar
pwHelpFile = new wchar_t[HtmlFHlp.Length() * 2];
pwHelpTopic = new wchar_t[HtmlTHlp.Length() * 2];

а конец строки как узнать?
если нужен символ конца строки то надо выделять память еще и для него
Valery52
Отправлено: 15.02.2007, 13:56


Ученик-кочегар

Группа: Участник
Сообщений: 8



Я сделал так:
CODE

// выделить память для строк WideChar
pwHelpFile = new wchar_t[(HtmlFHlp.Length()+1) * 2];
pwHelpTopic = new wchar_t[(HtmlTHlp.Length() +1)* 2];

ни чего не изменилось.
Спасибо за внимание, удалось скачать htmlhelp_support.zip.
Builder все больше меня разочаровывает.
nawok78
Отправлено: 15.02.2007, 14:41


Станционный диспетчер

Группа: Участник
Сообщений: 115



на какой строке зависает?
по F8 гонял?
Valery52
Отправлено: 16.02.2007, 09:59


Ученик-кочегар

Группа: Участник
Сообщений: 8



Зависает на функции
Hhopen1->OpenHelp(pwHelpFile, pwHelpTopic);
Функция начинает работать, появляется окно справки без текста и несформированное до конца, а далее:
CODE

Окно CPU:
              77F767CC  C3         ret
              ntdll.DbgBreakPoint:
              77F767CD  CC         int 3
       =>  77F767CE  C3          ret
              ntdll.DbgUserBreakPoint:
              77F767CF  CC         int 3

И более не каких сообщений.

Вернуться в Вопросы программирования в C++Builder