Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/14: Рейтинг темы: голосов - 14, средняя оценка - 5.00
DC
5 / 5 / 1
Регистрация: 04.09.2010
Сообщений: 17
1

Подключение С/С++ библиотеки к проекту на C#

05.09.2010, 05:40. Показов 2868. Ответов 2
Метки нет (Все метки)

Помогите новичку подключить С/С++ библиотеку к проекту на C#

Проблема:
- есть DLL написанная на C/C++
- в ней описана вот такие структуры:

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
57
58
59
60
61
62
63
64
65
#define MAX_DATA_ARRAY_SIZE     (1024)
 
/* Received message type    */
typedef enum
{
    PositiveReply,
    NegativeReply,
    ReplyReceivingFailure,
    CommandCancellation,
    ReplyTimeout,
}
REPLY_TYPE, *LPREPLY_TYPE;
 
/* Data structure for positive reply message    */
typedef struct
{
    BYTE    bCommandCode;
    BYTE    bParameterCode;
    struct
    {
        BYTE    bSt1;
        BYTE    bSt0;
    }
    StatusCode;
    struct
    {
        DWORD   dwSize;
        BYTE    bBody[ MAX_DATA_ARRAY_SIZE];
    }
    Data;
}
POSITIVE_REPLY, *LPPOSITIVE_REPLY;
 
/* Data structure for negative reply message    */
typedef struct
{
    BYTE    bCommandCode;
    BYTE    bParameterCode;
    struct
    {
        BYTE    bE1;
        BYTE    bE0;
    }
    ErrorCode;
    struct
    {
        DWORD   dwSize;
        BYTE    bBody[ MAX_DATA_ARRAY_SIZE];
    }
    Data;
}
NEGATIVE_REPLY, *LPNEGATIVE_REPLY;
 
/* Data structure for reply message */
typedef struct
{
    REPLY_TYPE      replyType;
    union
    {
        POSITIVE_REPLY  positiveReply;
        NEGATIVE_REPLY  negativeReply;
    }
    message;
}
REPLY, *LPREPLY;
и функция

C++
1
DLL_API DWORD WINAPI    ExecuteCommand( LPCSTR, CONST COMMAND, CONST DWORD, LPREPLY);
в ней возвращается инфа от DLL-ки

подскажите пожалуйста: как вызвать из C# библиотечную функцию и получить обратно данные из этой структуры?
вызывать без получения данных у меня получается
я делаю это так:

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
        public struct COMMAND
        {
            public byte bCommandCode;
            public byte bParameterCode;
            public struct DATA
            {
                public int dwSize;
                public byte[] lpbBody;
            }
            public DATA Data;
        }
 
        [DllImport(@"C:\device\DeviceDLL.dll", EntryPoint = "ExecuteCommand")]
        public static extern int ExecuteCommand(string ictPort, 
                                                       COMMAND cmd, 
                                                       int TimeOut, 
                                                       REPLY reply);
 
        COMMAND cmd = new COMMAND();
        cmd.bCommandCode = 0x31;
        cmd.bParameterCode = 0x30;
        cmd.Data.dwSize = 0;
 
        int res = ExecuteCommand( "COM1", cmd, 1000, reply);

библиотечная функция отрабатывает, устройство получает команды
а вот как объявить структуру REPLY и получить ответ - весь мозг сломал

Добавлено через 51 минуту
Как вариант было бы неплохо получить эту сруктуру в виде массива byte[]
а дальше как нибудь разберу!!

помогите, ПЛЗ!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 1 час 19 минут
Всем спасибо

Разобрался
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2010, 05:40
Ответы с готовыми решениями:

Подключение библиотеки к Qt проекту
В *.pro файле подключаю библиотеку таким образом: INCLUDEPATH += . с:/source/library/include...

Подключение С библиотеки (.so) к проекту С++
С++ не хочет подключать сишную библиотеку, пробовала подключить и методами gcc из консоли, и...

Подключение vb.net библиотеки к проекту на C#
Всем здравия. Начинаю изучать C# и одновременно переносить свой проект с одного языка на другой....

Подключение библиотеки dll (c++) к проекту на c#
Как подключить библиотеку dll написанную на c++ к проекту на c#? Добавлено через 5 минут Если...

2
139 / 137 / 21
Регистрация: 26.01.2010
Сообщений: 350
05.09.2010, 09:59 2
А показать решение для потомков?
0
DC
5 / 5 / 1
Регистрация: 04.09.2010
Сообщений: 17
05.09.2010, 19:42  [ТС] 3
Цитата Сообщение от tasty_sock Посмотреть сообщение
А показать решение для потомков?
принял всю эту, неизвестно зачем созданную, структуру в виде массива byte[]

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
        public struct COMMAND
        {
            public byte bCommandCode;
            public byte bParameterCode;
            public struct DATA
            {
                public int dwSize;
                public byte[] lpbBody;
            }
            public DATA Data;
        }
 
        [DllImport(@"C:\device\DeviceDLL.dll", EntryPoint = "ExecuteCommand")]
        public static extern int ExecuteCommand(string ictPort, 
                                                       COMMAND cmd, 
                                                       int TimeOut, 
                                                       byte[] reply);
 
        byte[] reply = new byte[1024];
        COMMAND cmd = new COMMAND();
        cmd.bCommandCode = 0x31;
        cmd.bParameterCode = 0x30;
        cmd.Data.dwSize = 0;
 
        int res = ExecuteCommand( "COM1", cmd, 1000, reply);
а потом разобрал и скидал данные в свою структуру

буду рад, если кому нибудь пригодится!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2010, 19:42

Подключение к проекту x64 библиотеки
Здравствуйте. Есть DLL 64 битная. То есть обычный implib его не возьмёт(на выходе получается файл...

Подключение к проекту своей библиотеки
Я хочу свои процедуры и функции подключать к проекту через #include <myfunc.h> Функции объявляю в...

Подключение библиотеки SFML к проекту
Ребята подскажите, возможно ли подключить библиотеку #include <CFML\Graphics.hpp>в Dev C++4.9.9.2,...

Подключение библиотеки ffmpeg к проекту
Здравствуйте. Я начал разбираться с библиотекой ffmpeg. Но не пойму как ее можно подключить к...


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

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

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