powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как структуру с bool(C) грамотно задекларировать в .Net?
8 сообщений из 8, страница 1 из 1
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38993084
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
typedef struct _MODE_STATUS {
    BYTE ModeId;
    bool IsRegistered,
    	 IsKeyPresent,
    	 IsWrongHardwareID,
    	 IsKeyExpired,
    	 IsModeExpired,
    	 IsBlackListedKey,
    	 IsModeActivated;
}MODE_STATUS, *PMODE_STATUS;

 extern "C" BOOL  __stdcall CheckKey( char* Key, char* Name, PMODE_STATUS mode_status );

BOOL __stdcall CPP7_Check_LicenseKey(char* Key, char* Name, PMODE_STATUS ModeStatus)
{ 
  return CheckKey(Key, Name, ModeStatus);
}



Код: vbnet
1.
2.
  Public Declare Function CPP7_Check_LicenseKey Lib "License.dll" _
   (ByVal Key As String, ByVal Name As String, ByRef ModeStatus As MODE_STATUS) As Boolean



Вот так не катит:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 <StructLayout(LayoutKind.Sequential)>
  Public Structure MODE_STATUS
    Dim ModeId As Byte
    Dim IsRegistered As Boolean
    Dim IsKeyPresent As Boolean
    Dim IsWrongHardwareID As Boolean
    Dim IsKeyExpired As Boolean
    Dim IsModeExpired As Boolean
    Dim IsBlackListedKey As Boolean
    Dim IsModeActivated As Boolean
  End Structure



Полагаю из-за того что в C все bool засунуты битами в единственный байт,
а в .Net каждый Boolean уже байт если не напутал.

Делаю свою API на базе другой API, чтоб воспользоваться из .Net,и структура не заполняется
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38993096
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Читал, что bool занимает 1 байт (целочисленный), может его и маршалить как Byte?
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38993100
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,

VB, Boolean - 2 bytes
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38993101
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типо такого, не пробовал раньше:
Код: vbnet
1.
2.
3.
4.
5.
6.
<StructLayout(LayoutKind.Sequential)>
    Public Structure MODE_STATUS
        Dim ModeId As Byte
        <MarshalAs(UnmanagedType.I1)>
        Dim SomeField2 As Boolean 'А может As Byte или ...
    End Structure


MSDNA 1-byte signed integer. You can use this member to transform a Boolean value into a 1-byte, C-style bool ( true = 1, false = 0)
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38993184
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADТипо такого, не пробовал раньше:
Код: vbnet
1.
2.
3.
4.
5.
6.
<StructLayout(LayoutKind.Sequential)>
    Public Structure MODE_STATUS
        Dim ModeId As Byte
        <MarshalAs(UnmanagedType.I1)>
        Dim SomeField2 As Boolean 'А может As Byte или ...
    End Structure


MSDNA 1-byte signed integer. You can use this member to transform a Boolean value into a 1-byte, C-style bool ( true = 1, false = 0)

Да, спасибо, вот так спасло:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  <StructLayout(LayoutKind.Sequential)>
  Public Structure MODE_STATUS
    Dim ModeId As Byte
    <MarshalAs(UnmanagedType.I1)> Dim IsRegistered As Boolean
    <MarshalAs(UnmanagedType.I1)> Dim IsKeyPresent As Boolean
    <MarshalAs(UnmanagedType.I1)> Dim IsWrongHardwareID As Boolean
    <MarshalAs(UnmanagedType.I1)> Dim IsKeyExpired As Boolean
    <MarshalAs(UnmanagedType.I1)> Dim IsModeExpired As Boolean
    <MarshalAs(UnmanagedType.I1)> Dim IsBlackListedKey As Boolean
    <MarshalAs(UnmanagedType.I1)> Dim IsModeActivated As Boolean
  End Structure


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

Да, блин, купил год назад "новый" AsProtect считай даром -за 20$ (вместе с новой версией старого),
дай думаю воспользуюсь,
там ключи короткие в строчку вместо простыней, которые в старом, всяко поприличней выглядит.
Ну и вот сижу разбираюсь в этих "модах",
вообще старый конечно попроще и поудобней, ток ради коротких ключей имеет смысл.
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38995260
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А <MarshalAs(UnmanagedType.Bool)> не подходит?
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38995267
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrVoid,

MSISDN пишет что это 4х-байтовое поле, а bool - Сишный, однобайтовый
...
Рейтинг: 0 / 0
Как структуру с bool(C) грамотно задекларировать в .Net?
    #38995270
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADMSISDN
уф... уработался. читать как MSDN
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как структуру с bool(C) грамотно задекларировать в .Net?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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