Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2016, 00:11   #11
HelloWold
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

Вот, нашел описание функций:
1) GetPartOfSpeech([in] BSTR gram_code, [retval, out] UINT* result) – выдает по коду номер части речи;
2) GetPartOfSpeechStr([in] UINT PartOfSpeech, [retval, out] BSTR* result) – выдает по номеру части речи текстовое представление части речи;
3) GetGrammems([in] BSTR gram_code, [retval, out] UINT* result) – выдает по одному коду(первые два символа в gram_code) набор граммем (один бит а result – одна граммема);
4) GrammemsToStr([in] UINT grammems, [retval, out] BSTR* result) – переводит набор граммем в текстовое представление;
HelloWold вне форума Ответить с цитированием
Старый 28.01.2016, 09:05   #12
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
function GetMorphDetail(const SrcAncodes: string): string;
  var
    OneAncode: string;
    i: integer;
  begin
    Result := '';
    i := 1;
    while  i < Length(SrcAncodes) do
      begin
        OneAncode := Copy(SrcAncodes, i, 2);
        if Result <> '' then
          Result := Result + ' ';
        Result := Result + ' ' + RusGramTab.GetPartOfSpeechStr(RusGramTab.GetPartOfSpeech(OneAncode)) + '=' + RusGramTab.GrammemsToStr(RusGramTab.GetGrammems(OneAncode));
        i := i + 2;
      end;
  end;
Вольный перевод:
Код:
String __fastcall GetMorphDetail(const String SrcAncodes)
{
    String OneAncode,  Result = "";
    int i=1;
    while(i < SrcAncodes.Length())
    {
            OneAncode = SrcAncodes.SubString(i, 2);
            if(Result != "")
            {
                  Result += " "; 
            }
            
             Result += " "+Form1->RusGramTab->GetPartOfSpeechStr(Form1->RusGramTab->GetPartOfSpeech(OneAncode)) + "=" +
                                  Form1->RusGramTab->GrammemsToStr(Form1->RusGramTab->GetGrammems(OneAncode));
             i +=2;
             // или мне больше нравится
             //++i;
             //++i;

    }

}
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 02.02.2016, 16:20   #13
HelloWold
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Вольный перевод:
Практически ничем не отличен от моего кода.
Просто данную строчку:
Код:
Form1->RusGramTab->GetPartOfSpeechStr(Form1->RusGramTab->GetPartOfSpeech(OneAncode))
Я разбил на две(что бы узнать в какой идет утечка)

P.S. В Debug переменные выглядят так(см аттач) - ничего криминального.
Изображения
Тип файла: jpg 1.jpg (74.3 Кб, 144 просмотров)
Тип файла: jpg 2.jpg (79.1 Кб, 151 просмотров)
Тип файла: jpg 3.jpg (73.6 Кб, 143 просмотров)
HelloWold вне форума Ответить с цитированием
Старый 02.02.2016, 16:25   #14
HelloWold
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

Может мне RusGramTab нужно как-то по-другому объявить?
На данный момент объявлено так:

Unit1.h
Код:
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TButton *Button1;
	TMemo *Memo1;
	TMemo *Memo2;
	void __fastcall FormCreate(TObject *Sender);
	void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
	void __fastcall Button1Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
	IGramTabPtr RusGramTab;
};
Unit1.cpp
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	RusGramTab = new CoRusGramTab->Create();
	RusGramTab->Load();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
	RusGramTab->Release();
}
HelloWold вне форума Ответить с цитированием
Старый 09.02.2016, 08:16   #15
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
Практически ничем не отличен от моего кода.
Я бы поспорил. Надеюсь посмотрите внимательно и сделаете выводы.
Или мне построчно показывать?
Код:
IGramTabPtr
- это COM интерфейс? Судя по коду, то да.
тогда, осмелюсь предположить:
Код:
RusGramTab = new CoRusGramTab->Create();
надо поменять на:
Код:
RusGramTab = CoRusGramTab->Create();
Посмотрите, что возвращает
Код:
Create();
Неплохо было бы проверять
Код:
RusGramTab
на NULL после получения экземпляра из
Код:
Create();
.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 09.02.2016, 08:56   #16
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Ох, все дядя Леня должен делать.

После изучения заголовочных файлов либ имеем:
Код:
interface DECLSPEC_UUID("{ECD62F7D-19B6-11D3-A77A-2679A7000000}") IGramTab;
typedef TComInterface<IGramTab, &IID_IGramTab> IGramTabPtr;
......
typedef IGramTabPtr RusGramTabPtr;
......

// *********************************************************************//
// COCLASS DEFAULT INTERFACE CREATOR
// CoClass  : RusGramTab
// Interface: TCOMIGramTab
// *********************************************************************//
typedef TCoClassCreatorT<TCOMIGramTab, IGramTab, &CLSID_RusGramTab, &IID_IGramTab> CoRusGramTab;
Далее в VCL у нас:

Код:
class TCoClassCreatorT : public CoClassCreator
{
public:
  static TOBJ    Create();
...
};
Значит надобно делать так:

объявляем:
Код:
RusGramTabPtr RusGramTab;
вызываем экземпляр:
Код:
RusGramTab = CoRusGramTab::Create();
уничтожаем:
Код:
RusGramTab->Release();
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 09.02.2016 в 09:06.
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечка памяти OmegaBerkut Общие вопросы Delphi 21 09.04.2015 22:12
утечка памяти Кудаив Помощь студентам 1 30.04.2012 18:18
Утечка памяти Juffin Общие вопросы Delphi 3 02.11.2010 12:11
Утечка памяти ZvEr_HaCkEr Свободное общение 13 24.09.2010 19:30
утечка памяти в С++ vengo Общие вопросы C/C++ 9 10.06.2008 21:24