Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pinvoke 
:(
    Опции темы
klyxa
Дата 7.2.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



привет. есть структура на с

Код

typedef struct __eth_header__
{
    UCHAR DstMAC[6];
    UCHAR SrcMAC[6];
    USHORT EthType; 
} t_eth_head;

typedef struct __packet__
{
    t_eth_head header;
    UCHAR data[50];
} ь_packet;


вот так описал на с#

Код

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct t_eth_head
        {
            /// UCHAR[6]
            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 6)]
            public string DstMAC;
            /// UCHAR[6]
            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 6)]
            public string SrcMAC;
            /// USHORT->unsigned short
            public ushort EthType;
        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct t_packet
        {
            /// t_eth_head->__eth_header__
            public t_eth_head header;
            /// UCHAR[50]
            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 50)]
            public string data;
        }


сигнатура 

Код

        [DllImport("my_dll.dll", EntryPoint = "DoReadProc", CallingConvention = CallingConvention.Cdecl)]
        public static extern bool DoReadProc(ref t_packet p);


и примерно такой вызов

Код

        static void Main(string[] args)
        {
            //...

            t_packet pckt = new t_packet();
            while (true)
            {
                if (DoReadProc(ref pckt))
                    break;
            }
            
            //..
        }


данные на стороне "си" успешно записываются, но в мак адресе или в  данных встречается 0х00,а так как указан тип public string DstMAC;
то всё что после 0х00 отбрасывается. как мне исправить, описать структуру на стороне c#?




PM MAIL   Вверх
klyxa
Дата 7.2.2011, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Код

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct t_eth_head
        {

            /// UCHAR[6]
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] DstMAC;

            /// UCHAR[6]
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] SrcMAC;

            /// USHORT->unsigned short
            public ushort EthType;
        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct t_packet
        {

            /// t_eth_head->__eth_header__
            public t_eth_head header;

            /// UCHAR[50]
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 50)]
            public byte[] data;
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.