0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 7
1

Как использовать MarshalAs для структуры

12.07.2015, 18:51. Показов 905. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем сейчас пытаюсь вызвать функции DLL библиотек из C#... и передать туда структуры или ссылки на них...
Как прописать структуру arg_t cmd_ln_parse_r() в C#?
API библиотек:
http://cmusphinx.sourceforge.n... index.html
http://cmusphinx.sourceforge.n... index.html

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
 
namespace callsphinx
{    
    class Program
    {
        //ps_decoder_t* ps_init(cmd_ln_t* config)
        [DllImport("pocketsphinx.dll",
            SetLastError = true,
            CallingConvention = CallingConvention.Cdecl)]
        public extern static IntPtr ps_init(
            IntPtr config);
 
        //int ps_decode_raw(ps_decoder_t *ps, FILE *rawfh, char const *uttid, long maxsamps);
        [DllImport("pocketsphinx.dll",
            SetLastError = true,
            CallingConvention = CallingConvention.Cdecl)]
        public extern static int ps_decode_raw(
            IntPtr ps,
            IntPtr rawfh,
            [MarshalAs(UnmanagedType.LPStr)] string uttid,
            int maxsamps);
 
        [DllImport("msvcrt.dll",
            SetLastError = true,
            CallingConvention = CallingConvention.Cdecl)]
        public extern static IntPtr fopen(
            [MarshalAs(UnmanagedType.LPStr)] string _Filename,
            [MarshalAs(UnmanagedType.LPStr)] string _Mode);
 
        //SPHINXBASE_EXPORT cmd_ln_t* cmd_ln_parse_r    (   cmd_ln_t *  inout_cmdln,
        //    arg_t const *     defn, - как эту структуру описать?
        //    int32     argc,
        //    char *    argv[],
        //    int32     strict
        //    )    
        [DllImport("sphinxbase.dll",
            SetLastError = true,
            CallingConvention = CallingConvention.Cdecl)]
        public extern static IntPtr cmd_ln_parse_r(/*Надо придумать как сдесь 5 параметров описать...*/);
 
        static void Main(int argc, string[] args)
        {
            //char *argv[]; - код из "Си"
            IntPtr config = cmd_ln_parse_r(null, cont_args_def, argc, argv, true);            
            IntPtr ps = ps_init(config);
            IntPtr fh = fopen(@"goforward.raw", "rb");
            int rv = ps_decode_raw(ps, fh, "goforward", -1);
        }
    }
}
Описание структуры на Си

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* @struct arg_t
* Argument definition structure.
*/
typedef struct arg_s {
    char const *name;   /**< Name of the command line switch */
    int type;           /**< Type of the argument in question */
    char const *deflt;  /**< Default value (as a character string), or NULL if none */
    char const *doc;    /**< Documentation/description string */
} arg_t;
 
static const arg_t cont_args_def[] = {
    POCKETSPHINX_OPTIONS,
    /* Argument file. */
    {"-argfile",
     ARG_STRING,
     NULL,
     "Argument file giving extra arguments."},
    {"-adcdev",
     ARG_STRING,
     NULL,
     "Name of audio device to use for input."},
    {"-infile",
     ARG_STRING,
     NULL,
     "Audio file to transcribe."},
    {"-inmic",
     ARG_BOOLEAN,
     "no",
     "Transcribe audio from microphone."},
    {"-time",
     ARG_BOOLEAN,
     "no",
     "Print word times in file transcription."},
    CMDLN_EMPTY_OPTION
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2015, 18:51
Ответы с готовыми решениями:

Как использовать структуры
Начал смотреть структуры и возник вопрос Как данный код переделать в структуру входных и выходных...

Нужно ли для работы с WAV формате, использовать структуры?
Здравствуйте, пишу курсовую, надо сделать осциллограф формата WAV. Решил использовать C#(что бы и...

Как использовать структуры в классе?
Делал калькулятор и столкнулся с проблемой,как правильно использовать структуру в классе?Поправьте...

Как использовать структуры в таком задании?
Здравствуйте! Помогите, кто может с структурами в данном условии задачки: Есть структура:...

0
12.07.2015, 18:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2015, 18:51
Помогаю со студенческими работами здесь

Для чего и где и удобнее использовать структуры, а где классы?
Для чего и где и удобнее использовать структуры, а где классы?

Почему все рекомендуют для вёрстки меню использовать списки, если проще для этих целей использовать
если для этих целей, особенно для горизонтального меню, проще использовать подряд несколько тегов...

Использовать объект структуры внутри класса
Здравствуйте! Необходимо сделать так, чтобы была возможность использовать данные из структуры...

Как использовать stl для своего класса(для пользовательского типа данных)
Мне бы пример какой-нибудь а то в инете ищу ничего не могу найти, кроме базовых типов данных

Как использовать RefEdit для определения переменных для работы с выделенным регионом
Добрый день. Перерыв кучу форумов, из кусочков кода сделал нужный макрос, который проверяет...

Какой алгоритм getHashCode использовать как для больших значений, так и для маленьких
Есть некий класс с какими-то числовыми полями. Причем значения полей могут варьироваться во всей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru