powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Указатель на структуру и C#
14 сообщений из 14, страница 1 из 1
Указатель на структуру и C#
    #39676233
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
When a movie is over, it's a black


Есть DLL, в ней есть функция GetLicenseInfo, возвращающая указатель PLicenseInfo

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  TLicenseInfo = packed record
    LicType: ShortInt;
    Trial: Boolean;
    UsersCount: Integer;
    WebUsersCount: Integer;
    ChiefUsersCount: Integer;
  end;
  PLicenseInfo = ^TLicenseInfo;



Проблема: наш сишарп-программист не может получить эти данные в шарпах.

Он объявил в коде нечто вроде

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public struct TLicenseInfo
{
  public UShortInt LicType;
  public bool Trial;
  public int UsersCount;
  public int WebUsersCount;
  public int ChiefUsersCount;
}



и не понимает, как ему в шарпах это заполнить, если у него на руках только указатель, который вернула DLL.

Киньте пример, если можно, как это сделать?
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676251
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не по теме, но сильно мне не нравитсяКвейд
Код: pascal
1.
 packed record

Я бы объявил так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
 TLicenseInfo = record
    LicType: ShortInt;
    Trial: Boolean;
    Reserver: Smallint;
    UsersCount: Integer;
    WebUsersCount: Integer;
    ChiefUsersCount: Integer;
  end;

Иначе от выравнивания можно отгрести
КвейдЕсть DLL, в ней есть функция GetLicenseInfo, возвращающая указатель PLicenseInfoПокажи импорт dll на C#
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676262
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугл посылает в сторону такого импорта
Код: c#
1.
2.
3.
[return:MarshalAs(UnmanagedType.I4)]
  [DllImport("TestTkzDLL.dll")]
  public static extern IntPtr ExpFunc(...);

И вызова метода Marshal.PtrToStructure
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676265
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: c#
1.
[return:MarshalAs(UnmanagedType.I4)]


Читать как
Код: c#
1.
[return:MarshalAs(UnmanagedType.LPStruct)]
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676282
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

среда исполнения - 32 битная


Код: c#
1.
2.
        [DllImport(LicenseDLL, EntryPoint = "GetLicenseInfo")]
        private static extern UInt32 GetLicenseInfo([MarshalAs(UnmanagedType.AnsiBStr)]string ASysData, int ACounter, IntPtr result);





вот это и есть тип "указателя" в шарпах
Код: c#
1.
UInt32
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676296
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейдвот это и есть тип "указателя" в шарпахНет. У них есть IntPtr
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676392
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейднаш сишарп-программист не может получить эти данные в шарпах.

Возможно, ему следует сменить язык программирования или профессию. И, раз уж ты у него на
побегушках, то лучше идти в загончик для
шарпеев
, ибо там больше шансов найти такого, который знает как работать с нативными
данными.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676405
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрались.

Структуру в шарпах объявили с атрибутом, выравнивающим на границу байта

Код: c#
1.
[StructLayout(LayoutKind.Sequential, Pack=1)]




результат функции GetLicenseInfo объявили как IntPtr, а дальше в шарпах замаршаллили IntPtr к объявленной структуре.


Все получилось.


Dimitry Sibiryakov, прень новенький, пусть учится
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676408
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Не по теме, но сильно мне не нравитсяКвейд
Код: pascal
1.
 packed record

Я бы объявил так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
 TLicenseInfo = record
    LicType: ShortInt;
    Trial: Boolean;
    Reserver: Smallint;
    UsersCount: Integer;
    WebUsersCount: Integer;
    ChiefUsersCount: Integer;
  end;

Иначе от выравнивания можно отгрести

Как раз чтобы не огрести от выравнивания, надо все записи паковать.

По сабжу - пусть получает указатель на структуру и читает из него его как из бинарного буфера.
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676418
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не очень знаю C#, но это точно одинаковые типы?

Код: pascal
1.
LicType: ShortInt;

Код: c#
1.
public UShortInt LicType;
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676419
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если верить этому , то там sbyte должен быть.
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676422
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейдпрень новенький, пусть учитсяКвейд, я весь ответ написал ни разу не видев C# и о маршалинге нативных типов узнал при гуглении в процессе поиска ответа.

Может ну его такого "программиста"
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39676524
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдВсе получилось.Не "Все получилось", а "пока работает". Смешивание управляемого и неуправляемого кода может приводить к неприятным спецэффектам (самому маяться не приходилось, но наслушался). Самое фееричное, что я слышал - нетовский сборщик мусора "освобождал" память сишной DLLки. Но в Microsoft мешать умеют, так что теоретически отладится можно.
...
Рейтинг: 0 / 0
Указатель на структуру и C#
    #39677719
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpЯ не очень знаю C#, но это точно одинаковые типы?

Код: pascal
1.
LicType: ShortInt;

Код: c#
1.
public UShortInt LicType;

Нет. Переписали как

Код: c#
1.
byte LicType;
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Указатель на структуру и C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]