Подключение сторонней библиотеки на С++

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 19.10.2010 (Вт) 10:07

Да возможно и в первый параметр sol_MorphologyAnalysis надо передать также указатель на поисковую машину.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 19.10.2010 (Вт) 11:48

strateg писал(а):В итоге если вызвать функцию MorphologyAnalysis один раз, то в rez3 пятизначное число, если вызвать повторно, то там цифра 2, тогда как должно быть 3. 3 Узла.

Явно что-то идет не так. А у Вас работает эта функция?
В первом параметре GetNodeIEntry вероятно должен передаваться указатель на поисковую машину sol_CreateSearchEngine, а не на граматическую, но всё равно непонятно почему в rez3 такая пляска с цифрами. И в декларации всё верно и указатель на строку передал.

Это уже относится к семантике, а не к синтаксису, и требует ориентации в предметной области, чего у меня нет. ;)

Проверь индексы - вряд ли они начинаются с 1. Зная С-шную природу библиотек, они начинаются с 0, т.е. 0,1,...,n-1, где n - число элементов, адресующихся индексами.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 19.10.2010 (Вт) 12:12

Если Вы про CountRoots и что если она вернула - 2, то значит от нуля это получается 0-2 всего, тогда тут тоже не получается. Берешь нулевой узел или 1-й результат тот же. Ладно эта функция не так уж важна.

Вот функция GetEntryCoordState казалось бы элементарная, получает падеж для слова и так далее

int sol_GetEntryCoordState( HGREN hEngine, int EntryIndex, int CoordId )

Private Declare Function GetEntryCoordState Lib "solarix_grammar_engine.dll" Alias "sol_GetEntryCoordState" (ByVal hBuilder As Long, ByVal EntryIndex As Long, ByVal CoordId As Integer) As Long
rez = SeekWord(rezgr, StrPtr("КОШКА"), 1)
rez2 = GetEntryClass(rezgr, rez) - получаем класс - 7 существительное
rez3 = GetEntryCoordState(rezgr, rez, 20) передаем индекс слова, читсло 20-ть означает падеж. Должны получить номер падежа 1- именительный. Получаем -1 - ошибка.


Чудеса

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 19.10.2010 (Вт) 13:13

strateg писал(а):Чудеса

Попробуй не использовать Integer в параметрах, а только Long. Конечно, ерунда, но больше у меня никаких предположений нет.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 19.10.2010 (Вт) 13:57

Да, мне уже приходила такая мысль, не помогло :cheese:
Если у Вас будет время возможно вы попробуете на С++, работает оно хотя бы там? Просто чтобы знать стоит ли копать дальше.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключение сторонней библиотеки на С++

Сообщение Хакер » 19.10.2010 (Вт) 14:15

strateg, сформулируй полностью свою и полоние дел на данный момент.

Есть желание помочь, но нет желания прочитывать всю тему и прослеживать весь ход разбирательства.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 19.10.2010 (Вт) 17:52

Проблема - пользоваться функциями из библиотеки С++ средствами Visual Basic 6.0
Функции анализируют слова определяют часть речи, падеж число и т.д.
Разбивают предложения на слова и текст на предложения
Генереруют готовые семантически правильные предложения, выполняют синонимизацию, перефразировку текста и т.д.

Что удалось сделать?
Разбивать текст на предложения и предложения на слова
Получать часть речи каждого слова.
Получать все словоформы и связанные слова с данным словом, например со словом кошка связано слово игривое.
Получать леммы - исходные части слов. Кошки-Кошка
Удается передавать параметры этим функциям и получать результаты.

Что не удалось?
По необъяснимым причинам некоторые функции отказывают работать.
Функция склонения существительных падает, хотя её декларация практически идентична тем что работают правильно
Морфологический анализатор выдает непонятно что
Функция определения падежа числа и т.д. возвращает - 1
Функция генерирования предложения возвращает - 1

Вообщем самые вкусные функции пока не работают. Точнее работают но не так как надо.

Хакер Напиши что от меня требуется? Пришлю в личку проект на Visual Basic и библиотеки. Собственно по-другому не могу описать проблему, потому как сам не совсем понимаю проблему.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключение сторонней библиотеки на С++

Сообщение Хакер » 19.10.2010 (Вт) 18:11

Негодное описание.

strateg писал(а):пользоваться функциями из библиотеки С++ средствами Visual Basic 6.0

В этом само по себе нет никакой проблемы.

Если не можешь сформулировать напиши в виде «Что делаю», «Как оно себя ведёт», «Ожидаемое поведение» плюс ссылки на источники (доки, хеадеры и т.п.) из которых следует логичность действий и ожидаемое поведение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 19.10.2010 (Вт) 20:48

Отправил в личку

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 20.10.2010 (Ср) 14:01

Еще прикрепляю список констант.
Вложения
_sg_api.rar
(1.75 Кб) Скачиваний: 72

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 20.10.2010 (Ср) 17:54

Удалось запустить функцию
GetClassName
, а также
SyntaxAnalysis

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 24.10.2010 (Вс) 17:00

strateg писал(а):rez2 = GetEntryClass(rezgr, rez) - получаем класс - 7 существительное
rez3 = GetEntryCoordState(rezgr, rez, 20) передаем индекс слова, читсло 20-ть означает падеж. Должны получить номер падежа 1- именительный. Получаем -1 - ошибка.

Чудеса

А никаких чудес. Просто константы в _sg_api.rar устаревшие.

const int CASE_ru = 20; // enum ПАДЕЖ
const int COMPAR_FORM_ru = 23; // enum СТЕПЕНЬ

GetCoordName(hEngine, 20) -> ЗАЛОГ
GetCoordName(hEngine, 23) -> ПАДЕЖ

const int NOUN_ru = 7; // class СУЩЕСТВИТЕЛЬНОЕ
const int PARTICIPLE_ru = 20; // class ЧАСТИЦА
const int CONJ_ru = 21; // class СОЮЗ
const int ADVERB_ru = 22; // class НАРЕЧИЕ

GetClassName(hEngine, 7) -> СУЩЕСТВИТЕЛЬНОЕ
GetClassName(hEngine, 19) -> ЧАСТИЦА
GetClassName(hEngine, 20) -> СОЮЗ
GetClassName(hEngine, 21) -> НАРЕЧИЕ
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 26.10.2010 (Вт) 15:40

C этим я разобрался и падежи получил и морфологический анализ и синтаксический и почти всё получилось.

Остались фукнции

GeneratePhrase3
Paraphrase
SeekThesaurus

Эти функции выдают или - 1 или вообще ничего не возвращают. А у Вас эти функции работают? Если вы еще занимаетесь этим вопросом.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 26.10.2010 (Вт) 16:45

strateg писал(а):Остались функции GeneratePhrase3 Paraphrase SeekThesaurus
Эти функции выдают или - 1 или вообще ничего не возвращают. А у Вас эти функции работают? Если вы еще занимаетесь этим вопросом.

Я специально не занимаюсь, но было время - посмотрел, поскольку были непонятки у тебя. Эти функции я посмотрю вечером, хотя какой с меня толк - нужно же разбираться, что туда пихать им.

Если не сложно, кусочек кода, чтобы мне не набивать самому.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 26.10.2010 (Вт) 19:57

strateg писал(а):Остались функции GeneratePhrase3 Paraphrase SeekThesaurus
Эти функции выдают или - 1 или вообще ничего не возвращают. А у Вас эти функции работают?

int sol _ GeneratePhrase3(HGREN_PHRASOMAT hBuilder, HGREN_FGTEMPLATE hTemplate, int PhraseType, wchar_t * NewPhrase, int maxlen)

int sol _ Paraphrase (HGREN_PHRASOMAT hBuilder, int ScenarioType, int SyntaxAnalysisFlags, int NGramFlags, int ThesaurusFlags, int DebugFlags, int ResultsFormat, int MaxSubst, const wchar_t * OrgPhrase, wchar_t * NewPhrase, int maxlen, int max_elapsed_msec)

HGREN_INTARRAY sol _ SeekThesaurus(HGREN hEngine, int EntryIndex, bool Synonyms, bool Grammar_Links, bool Translation, bool Semantics, int nJumps)

Вроде бы ничего сложного с этими функциями нет: всё передаётся через Long и нужно только не забывать про StrPtr на текстах.

Private Declare Function SeekThesaurus Lib dllname Alias "sol _ SeekThesaurus" (ByVal hEngine As Long, ByVal EntryIndex As Long, ByVal Synonyms As Long, ByVal Grammar_Links As Long, ByVal Translation As Long, ByVal Semantics As Long, ByVal nJumps As Long) As Long

У меня ВижуалБэйсика нет, приходится на VBScript-е отрабатывать.
Код: Выделить всё
   For Each s In Array("простыни", "роем", "кошками", "шлемом", "пьет", "высоко")
      nEntryIndex = .SeekWord(hEngine, UCASE(s), True) ' для VB будет StrPtr(UCASE(s))

      sEntryName = Space(nLexemLen)
      Call .GetEntryName(hEngine, nEntryIndex, sEntryName) ' для VB будет StrPtr(sEntryName)
      sEntryName = Left(sEntryName, InStr(sEntryName & vbNullChar, vbNullChar) - 1)

      nClass = .GetEntryClass(hEngine, nEntryIndex)
      hArray = .SeekThesaurus(hEngine, nEntryIndex, False, False, False, False, 0)
      If hArray <> 0 Then
         nArray = .CountInts(hArray)

         nArrayMax = nArray
         If nArrayMax > 15 Then nArrayMax = 15

         t = ""
         For iArray=0 To nArrayMax-1
            nEntryArray = .GetInt(hArray, iArray)

            sEntryArrayName = Space(nLexemLen)
            Call .GetEntryName(hEngine, nEntryArray, sEntryArrayName) ' для VB будет StrPtr(sEntryArrayName)
            sEntryArrayName = Left(sEntryArrayName, InStr(sEntryArrayName & vbNullChar, vbNullChar) - 1)

            t = t & " " & nEntryArray & " " & sEntryArrayName
         Next
WScript.Echo s & " nEntryIndex=" & nEntryIndex & " " & sEntryName & " nClass=" & nClass & " nArray=" & nArray & " t=" & t

         rez1 = .DeleteInts(hArray)
      End If
   Next

SeekThesaurus писал(а):простыни.nEntryIndex=31297..простынуть.nClass=13.nArray=5 t= 59368 озябнуть 56835 остыть 31300 простывать 31296 простынуть...
роем.......nEntryIndex=23569..рой............nClass=7..nArray=1 t= 23638 роение
кошками..nEntryIndex=77787..кошка.........nClass=7..nArray=14 t= 77795 кошачий 77786 кошкин 77785 кошкоподобный 47751 по-кошачьи...
шлемом...nEntryIndex=1952...шлем..........nClass=7..nArray=5 t= 59924 одежда 176498 casque 158727 helmet 158728 helm...
пьет........nEntryIndex=48600..пить...........nClass=13.nArray=26 t= 85906 зашибать 40529 посасывать 10944 трескать 36339 прикладываться...
высоко....nEntryIndex=101500.высокий......nClass=10.nArray=23 t= 95931 длинный 11645 тонкий 63914 низкий 66923 невысокий...

Я, правда, не нашёл констант для Paraphrase и GeneratePhrase3 и задал их нулями.
Код: Выделить всё
      OrgPhrase = "пила лежит на столе"
      NewPhrase = Space(1024)
      iBuffer = .Paraphrase(hBuilder, 0, 0, 0, 0, 0, 0, 1, OrgPhrase, NewPhrase, 1024, 60000)
      NewPhrase = Left(NewPhrase, InStr(NewPhrase & vbNullChar, vbNullChar) - 1)

WScript.Echo OrgPhrase & " == " & NewPhrase

      hTemplate = .CreateFGTemplate(hBuilder, OrgPhrase, 1)
      If hTemplate <> 0 Then
         NewGenPhrase = Space(1024)
         iGenBuffer = .GeneratePhrase3(hBuilder, hTemplate, 0, NewGenPhrase, 1024)
         NewGenPhrase = Left(NewGenPhrase, InStr(NewGenPhrase & vbNullChar, vbNullChar) - 1)

WScript.Echo OrgPhrase & " == " & NewPhrase & " == " & NewGenPhrase

         rez1 = .DeleteFGTemplate(hTemplate)
      End If

Paraphrase писал(а):пила лежит на столе == пила лежит на столе ==
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 27.10.2010 (Ср) 12:25

У меня вроде всё также

Код: Выделить всё
Private Declare Function GeneratePhrase3 Lib "synonymizer.dll" Alias "sol_GeneratePhrase3" (ByVal hBuilder As Long, hBuilderTem As Long, ByVal Typefrase As Integer, ByVal str2 As long, ByVal maxlen As Long) As Long

rezPhraseGenerator = CreatePhraseGenerator(rezgr, 1)
reztemp = CreateFGTemplate(rezPhraseGenerator, StrPtr("Кошка пьет молоко"), 1)
str2 = Space(1000)
rezfr = GeneratePhrase3(rezPhraseGenerator, reztemp, 0, StrPtr(str2), 1000)


Темплейт создается без проблем получаем указатель на него. А вот в rezfr всегда -1. Ну и ничего не возвращается.
Радует что у Вас работает. Может быть как-то vb-script приделать к своей программе?

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 27.10.2010 (Ср) 12:39

Да и констант я тоже не знаю, но это всё уже частности. Эксперементальным путем можно вывести.

и судя по исходникам вообще не должна возвращать - 1 Хотя они могли устареть

DLL_ENTRY void sol_GeneratePhrase3(
HGREN_PHRASOMAT hBuilder,
HGREN_FGTEMPLATE hTemplate,
int PhraseType,
wchar_t *NewPhrase,
int maxlen
)
{

LEM_CHECKIT_Z( hBuilder!=NULL );
LEM_CHECKIT_Z( hTemplate!=NULL );
LEM_CHECKIT_Z( NewPhrase!=NULL );

if( hBuilder==NULL || hTemplate==NULL )
{
*NewPhrase=0;
return;
}

UFString s; s.reserve(256);
hTemplate->GeneratePhrase( hBuilder, PhraseType, s );
lem_strncpy( NewPhrase, s.c_str(), maxlen-1 );
NewPhrase[ maxlen-1 ] = 0;

#else

return;
}

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 27.10.2010 (Ср) 13:00

strateg писал(а):У меня вроде всё также

Код: Выделить всё
Private Declare Function GeneratePhrase3 Lib "synonymizer.dll" Alias "sol_GeneratePhrase3" (ByVal hBuilder As Long, hBuilderTem As Long, ByVal Typefrase As Integer, ByVal str2 As long, ByVal maxlen As Long) As Long


Темплейт создается без проблем получаем указатель на него. А вот в rezfr всегда -1. Ну и ничего не возвращается.

Private Declare Function GeneratePhrase3 Lib "synonymizer.dll" Alias "sol_GeneratePhrase3" (ByVal hBuilder As Long, ByVal hBuilderTem As Long, ByVal Typefrase As Long, ByVal str2 As long, ByVal maxlen As Long) As Long

Если нет ByVal, то считается ByRef, т.е. передается указатель, а это не то, что ожидает функция. C-шный int - это VB-шный Long. Integer - это C-шный short.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 27.10.2010 (Ср) 16:25

Да пару раз ByVal я забыл, отсюда и были косяки.

Еще по поводу констант. Вот они: Или хотя бы часть

Код: Выделить всё
const int FG_LOGICS     = 0x00000001;
const int FG_GERUND1    = 0x00000002;
const int FG_GERUND2    = 0x00000004;
const int FG_QUEST      = 0x00000008; // генерировать вопросительные
const int FG_EXCLAM     = 0x00000010; // генерировать восклицательные
const int FG_INTRO      = 0x00000020;
const int FG_COMPLEX    = 0x00000040;
const int FG_MULTISENT  = 0x00000080;
const int FG_SUBSTWORDS = 0x00000100;
const int FG_PARAFRASE  = 0x00000200;
const int FG_COMSENT    = 0x00000400; // генерировать повествовательные предложения

const int FG_USE_LEX_WHEN_EXHAUSTED = 0x00010000; // если фильтрованные слова закончились,
                                                  // то использовать полный лексикон, а не
                                                  // исходный фильтрованный список
const int FG_EXTRACT_FIRST          = 0x00020000; // извекать не рандомно из фильтрованного
                                                  // списка, а один за одним

const int FG_DONT_REMOVE_USED       = 0x00040000; // не удалять из фильтрованного списка использованные.

const int FG_SYNONYMIZE_NOUNS       = 0x00080000; // выполнять синонимизацию существительных в sol_Paraphrase
const int FG_SYNONYMIZE_OTHERS      = 0x00100000; // выполнять синонимизацию не-существительных



Подскажите как правильно передать такую битовую комбинацию в функцию GeneratePhrase3 например.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 27.10.2010 (Ср) 16:35

strateg писал(а):Подскажите как правильно передать такую битовую комбинацию в функцию GeneratePhrase3 например.

Поскольку константы битовые, то с помощью "OR": FG_LOGICS OR FG_GERUND1 и т.д. сколько нужно. VB сложит побитово и передаст как целое число. Можно использовать "+", т.к. всё равно целые числа: FG_LOGICS + FG_GERUND1, но может возникнуть переполнение.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключение сторонней библиотеки на С++

Сообщение Хакер » 27.10.2010 (Ср) 17:15

Vi писал(а):Можно использовать

Но не нужно, потому что семантически неверно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 27.10.2010 (Ср) 17:20

Хакер писал(а):Но не нужно, потому что семантически неверно.

Но OR тоже семантически неверно, потому что по смыслу нужно И, т.е. AND: FG_LOGICS AND FG_GERUND1. :) Но не тут-то было.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключение сторонней библиотеки на С++

Сообщение Хакер » 27.10.2010 (Ср) 17:26

Это с точки зрения непрограммиста, который знает перевод слов «And»/«Or», но не знает смысл операторов «And»/«Or». С точки зрения программиста всё семантически верно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 27.10.2010 (Ср) 19:03

А пример можно?
Как задать эту константу в visual basic
Так не получается разумеется
const FG_LOGICS = 0x00000001


А оператор "OR":
Допустим надо преобразовать одну константу FG_QUEST, а не две
perem = FG_QUEST or 0 ?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Подключение сторонней библиотеки на С++

Сообщение iGrok » 27.10.2010 (Ср) 19:14

0x... для VB эксивалентно &H...

Т.е. Const FG_LOGICS = &H1& или Const FG_LOGICS As Long = &H1

А вопрос про OR лучше уточни. Сейчас он как-то странно выглядит.
label:
cli
jmp label

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 27.10.2010 (Ср) 20:01

Уточняю

Поскольку константы битовые, то с помощью "OR": FG_LOGICS OR FG_GERUND1 и т.д. сколько нужно.


А если нужно только FG_LOGICS

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Подключение сторонней библиотеки на С++

Сообщение Vi » 27.10.2010 (Ср) 20:10

strateg писал(а):А пример можно?
Допустим надо преобразовать одну константу FG_QUEST, а не две perem = FG_QUEST or 0 ?

Пример задания типизированных, т.е. имеющих тип, констант тебе уже привели, но я приведу ещё:
Код: Выделить всё
const  FG_LOGICS =  &h00000001 ' шестнадцатеричная запись
const  FG_LOGICS =  1 ' десятичная запись
const  FG_EXCLAM = &h00000010 ' шестнадцатеричная
const  FG_EXCLAM = 16 ' десятичная

rezfr = GeneratePhrase3(rezPhraseGenerator, reztemp, FG_SUBSTWORDS, StrPtr(str2), 1000)

rezfr = GeneratePhrase2(rezPhraseGenerator, FG_QUEST Or FG_EXCLAM Or FG_COMSENT, StrPtr(str2), 1000)

cond = FG_QUEST Or FG_EXCLAM Or FG_COMSENT
rezfr = GeneratePhrase2(rezPhraseGenerator, cond, StrPtr(str2), 1000)

rezfr = GeneratePhrase2(rezPhraseGenerator, cond Or FG_INTRO, StrPtr(str2), 1000)
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

strateg
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 12.10.2010 (Вт) 15:06

Re: Подключение сторонней библиотеки на С++

Сообщение strateg » 28.10.2010 (Чт) 9:26

Теперь всё понятно, одна беда осталась функция Parapharase возвращает ту же фразу что её и передали, никак на нее не влияя. А функция Generatefrase3 возвращает пробел.

Код: Выделить всё
Private Declare Function CreateFGTemplate Lib "synonymizer.dll" Alias "sol_CreateFGTemplate" (ByVal hBuilder As Long, ByVal Word As Long, ByVal lang As Long) As Long
Private Declare Function CountFGTemplateQuantors Lib "synonymizer.dll" Alias "sol_CountFGTemplateQuantors" (ByVal hBuilder As Long) As Long
Private Declare Function CountFGTemplateRoots Lib "synonymizer.dll" Alias "sol_CountFGTemplateRoots" (ByVal hBuilder As Long) As Long
Private Declare Function GeneratePhrase3 Lib "synonymizer.dll" Alias "sol_GeneratePhrase3" (ByVal hBuilder As Long, ByVal hBuilderTem As Long, ByVal Typefrase As Long, ByVal str2 As Long, ByVal maxlen As Long) As Long

rez6 = CreateFGTemplate(rezPhraseGenerator, StrPtr("Еще можно выделить медицинскую науку, которая, говоря кратко, представляет из себя следующее"), 1)
rez61 = CountFGTemplateQuantors(rez6)
rez62 = CountFGTemplateRoots(rez6)
str2 = Space(1000)
rez7 = GeneratePhrase3(rezPhraseGenerator, rez6, FG_SUBSTWORDS, StrPtr(str2), 10000)


Функции CountFGTemplateQuantors и CountFGTemplateRoots должны вернуть количество исходных единиц, которые выделил CreateFGTemplate, но возвращают они 0, так что получается функция CreateFGTemplate ничего не выделила и отработала впустую. Возможно туту проблема, что она получила строку как-то не так.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 71

    TopList