Для многомерных массивов это немного сложнее. Часто люди определяют явные макроконстанты, т. Е.
#define g_rgDialogRows 2
#define g_rgDialogCols 7
static char const* g_rgDialog[g_rgDialogRows][g_rgDialogCols] =
{
{ " ", " ", " ", " 494", " 210", " Generic Sample Dialog", " " },
{ " 1", " 330", " 174", " 88", " ", " OK", " " },
};
. Но эти константы могут быть вычислены и во время компиляции с помощью sizeof :
#define rows_of_array(name) \
(sizeof(name ) / sizeof(name[0][0]) / columns_of_array(name))
#define columns_of_array(name) \
(sizeof(name[0]) / sizeof(name[0][0]))
static char* g_rgDialog[][7] = { /* ... */ };
assert( rows_of_array(g_rgDialog) == 2);
assert(columns_of_array(g_rgDialog) == 7);
Примечание что этот код работает на C и C ++. Для массивов с более чем двумя измерениями используйте
sizeof(name[0][0][0])
sizeof(name[0][0][0][0])
и т. Д., Ad infinitum.
Парень, я наконец-то смог получить ответ ....
Это может быть полезно другим ... :)
это фактический компонент, который я создал. просто измените его под свои нужды.
Function TSRRule.AddWord (Word : String; Value : string = ''; Separator : char = '|') : integer;
var
OleValue : OleVariant;
begin
result := 0;
if Fwordlist.IndexOf(Word) = -1 then
begin
OleValue := Value;
Fwordlist.Add(Word);
FRule.InitialState.AddWordTransition(nil, word, Separator, SPWT_LEXICAL, FRuleName+'_value',Fwordlist.Count, OleValue, 1.0);
FWordCount := Fwordlist.Count;
result := FWordCount;
end;
end;
Вызов функции ...
FSpRunTimeGrammar := SpInProcRecoContext.CreateGrammar(2); // we assign another grammr on index 2
SrRule1 := TSRRule.Create(1,'Rule1',FSpRunTimeGrammar);
with SrRule1 do
begin
AddWord('Maxtor');
AddWord('Open NotePad','Notepad.exe');
AddWord('Maxtor Dexter TrandPack','',' ');
commit;
end;
SrRule2 := TSRRule.Create(2,'Rule2',FSpRunTimeGrammar);
with SrRule1 do
begin
AddWord('the box');
AddWord('WeLcOmE SaPi');
AddWord('Halo World');
commit;
end;
FSpRunTimeGrammar.CmdSetRuleState('Rule1',SGDSActive);
FSpRunTimeGrammar.CmdSetRuleState('Rule2',SGDSActive);
Пожалуйста, оставьте комментарий для пояснений .... удачи!
Существует прямая обертка для speech api, сделанная командой jedi, вы должны быть в состоянии найти код отсюда http://www.delphi-jedi.org/apilibrary.html однако я только что проверил и ссылка на файл sapi.zip кажется не работает, возможно, письмо команде jedi поможет вам найти его.
Если вы все-таки получите обертку, и учитывая, что это прямая обертка API, то документация MDSN - это то, что вам нужно, просто замените синтаксис Delphi на синтаксис C++ 99% будет простым, а что нет, просто задайте конкретный вопрос здесь (или в группах новостей Embarcadero)
.