Kompilování aplikace   zodpovězená otázka

VB.NET, .NET

Zdravím,

snažím se rozchodit jeden program na rozpoznávání řeči. Nepočítám že někdo někdy zkoušel CMU Sphinx, ale spíš se ptám na kompilování programu.

V tutoriálu zde (Pod nadpisem pro Windows):

http://cmusphinx.sourceforge.net/wiki/tu...

se píše že mám zkompilovat zdrojové soubory což se mi povedlo ve Visual Studiu C++. Měl jsem představu že mi z toho vyleze nějaké pěkné dll, které pak použiju jako referenci ve svém VB.NET projektu a opravdu se vytvoří pocketsphinx.dll knihovna ale Visual Studio ho nebere.

Mohl by mě někdo správně nasměrovat?

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co znamená, že ho VS nebere? Spadne? Napíše chybovou hlášku? Neudělá nic?

DLL knihovna může obsahovat kód dostupný přes COM, anebo může exportovat funkce, které voláte přes P/Invoke.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyhodí hlášku:

A reference could not be added. Please make sure that the file is accessible and that it is a valid assembly or COM component.

Na P/Invoke se podívám, díky...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Člověče jak to chcete používat v .NET programech, když je to nativní kód? Nemá to ani COM rozhraní, takže jediná možnost je P/Invoke a to se vám NEBUDE líbit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já v desktopech obecně plavu, takže tohle jsou pro mě novinky...

A máte pravdu, Pinvoke se mi přestává líbit ... :

Imports System.Runtime.InteropServices


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        init_sphinx()
        utterance_loop()

    End Sub

    <DllImport("C:\...\pocketsphinx.dll")> Public Shared Function init_sphinx()
    End Function

    <DllImport("C:\...\pocketsphinx.dll")> Public Shared Function utterance_loop()
    End Function
End Class

Program sice nevyhazuje žádnou chybu, ale taky vůbec nic nedělá. Vše pod voláním init_sphinx se neprovede...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to jako není chyba PInvoke, ale toho, že to blbě voláte.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tj možný, ale jak z toho mám něco vydedukovat když mi to ani nevyhodí chybovou hlášku ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Použijte dokumentaci k té knihovně (existuje-li), tam zjistíte, jakým způsobem knihovna oznamuje chyby.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky, tak už mi to hazí chyby. Snažím se právě implementovat tuhle funkci:

-tohle je z dokumentace:

cmd_ln_t* cmd_ln_init (cmd_ln_t * inout_cmdln,

arg_t const * defn,

int32 strict,

...

)

A tohle je moje jakási implementace :


<DllImport("D:\...\pocketsphinx.dll")> _
Public Function cmd_ln_init(ByVal inout_cmdln, ByVal defn, ByVal strict As Integer, ByVal ParamArray args() As String)
    End Function

A takhle ji volám:

 Dim conf = cmd_ln_init(Nothing, Nothing, True, "-hmm", modeldir & "/hmm/en_US/hub4wsj_sc_8k", "-lm", modeldir & "/lm/en/turtle.DMP", "-dict", modeldir & "/lm/en/turtle.dic", Nothing)
        

Problém je že vyhazuje MarshalDirectiveException o tom že :

Omezení PInvoke: Nelze vracet variantní hodnoty.

Co jsem googlil tak by to mělo znamenat, že musím přesně natypovat všechny parametry funkce, jinak to nepojede.A to je můj problém: Třeba první objekt by měl být jakýsi objekt typu cmd_ln_t, ale jak se k se k referenci na něj mám dostat?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Definice toho typu bude buď v dokumentaci, nebo v některém souboru .h. Radím vám nepouštějte se do toho, protože to stejně nezvládnete.

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback