Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как структуру с bool(C) грамотно задекларировать в .Net? / 8 сообщений из 8, страница 1 из 1
25.06.2015, 20:05
    #38993084
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как структуру с bool(C) грамотно задекларировать в .Net?
Код: 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
25.06.2015, 20:27
    #38993096
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как структуру с bool(C) грамотно задекларировать в .Net?
Дмитрий77,

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

VB, Boolean - 2 bytes
...
Рейтинг: 0 / 0
25.06.2015, 20:50
    #38993101
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как структуру с bool(C) грамотно задекларировать в .Net?
Типо такого, не пробовал раньше:
Код: 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
26.06.2015, 00:59
    #38993184
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как структуру с bool(C) грамотно задекларировать в .Net?
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
29.06.2015, 17:54
    #38995260
MrVoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как структуру с bool(C) грамотно задекларировать в .Net?
А <MarshalAs(UnmanagedType.Bool)> не подходит?
...
Рейтинг: 0 / 0
29.06.2015, 18:01
    #38995267
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как структуру с bool(C) грамотно задекларировать в .Net?
MrVoid,

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


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