106
Vývoj / Re:Python a dll pisane pre C+ nechcu papat bytearray
« kdy: 07. 03. 2021, 17:41:12 »
tecka:
takze dnu ma ist int ak tomu chapem spravne. ano?
takze dnu ma ist int ak tomu chapem spravne. ano?
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
#nazov funkcie
SignData = getattr(USB_dongle, "?SignData@@YAHAAUtTagData@@@Z")
SignData.argtypes = [c_char_p]
SignData.restype = c_char_p
#Data pre funkciu
ID = 'E0ABDGD12X0'
Data_input = '00000000000000000000000000'
Data_output = '0000000000000000000000000000000000000000000000000000'
key_set = ID+Data_input+Data_output
key_set = key_set.encode
print(SignData(key_set))
typedef struct tTagData
{
u64_t ddwUID;
u8_t data[DFSD_DATA_BLOCK_SIZE];
u8_t signedData[DFSD_DATA_BLOCK_SIG_SIZE];
} tagData_t;
tagData_t myTagData;
u8_t abDummyBlockData1[DFSD_DATA_BLOCK_SIZE]={
0x00, 0x00, 0x00, 0x00, //reg7
0x50, 0xa0, 0x00, 0x00, //reg8
0x61, 0x03, 0x00, 0x7d, //reg9
0xf3, 0xbd, 0x8f, 0xe5, //reg10
0x25, 0x81, 0x9c, 0x20, //reg11
0x00, 0x00, 0x00, 0x00, //reg12
0x41, 0x41, 0x30, 0x30, //reg13
0x31, 0x32, 0x36, 0x31, //reg14
0x00, 0x00, 0x00, 0x00 //reg15
};
myTagData.ddwUID = (u64_t)0xD0021F673FC988F0;
memcpy(myTagData.data,abDummyBlockData1,DFSD_DATA_BLOCK_SIZE);
iRetval = SignData(myTagData);
Cisto teoreticky aj ked bude vsetko 0 by mi kluc mal nieco vratit. Minimalne chybovu hlasku. Nech tam poslem co len chcem vzdy mi to vzhaduje internu chybu kluca. Clovek ktory pisal tu dll mi tvrdil ze je zla dlzka vstupnych dat (bytearray) to som riesil tak ze mam natvrdo retazec plny 0 o dlzke ako si predstavuje a ten posielam do tej funkcie. Samozerejme ze to nefunguje. On ma presviedca ze je chyba na 100% v pythone "lebo mne to funguje". 

int __cdecl Initialise(int,unsigned char,wchar_t *) ?from ctypes import *
import os
output_path = os.path.dirname(__file__)
USB_dongle_patch = os.path.join(output_path, 'XYZ_dll.dll')
USB_dongle = cdll.LoadLibrary(USB_dongle_patch)
test = 0
Dongle_ID = USB_dongle.Initialise()
print(Dongle_ID) [DllImport("XYZ_dll.dll", EntryPoint = "?Initialise@@YAHHEPA_W@Z", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern ReturnCode Initialise(bool enableLogging, uint oemID, String registrationKeyFilePathAndName);#Start Thereading
S1t = threading.Thread(target=Stage_1, args=("task",))
S2t = threading.Thread(target=Stage_2, args=("task",))
S3t = threading.Thread(target=Stage_3, args=("task",))
#Start a main Loop
while 1:
#Connect to SQL
if(SQL_Status == False):
connect_to_database()
if(SQL_Status == True and RFID_Status == False):
connect_to_RFID()
if(SQL_Status == True and RFID_Status == True):
#check()
if S1t.is_alive() is False:
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print ( current_time + 'Station 1 Restarted')
S1t.start()
if S2t.is_alive() is False:
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print ( current_time + 'Station 2 Restarted')
S2t.start()
if S3t.is_alive() is False:
S3t.start()
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print ( current_time + 'Station 3 Restarted')
layout = [[sg.Output(size=(80,10))],
[sg.Button('Exit')],[sg.Button('Debug ON/OFF'), sg.Button('Movement monitoring ON/OFF')]]
window = sg.Window('Shifter V 1.0', layout)
#XML_domino.XML_To_DB(Model, Batch)
#Start Thereading
S1t = threading.Thread(target=Stage_1, args=("task",))
S1t.start()
S2t = threading.Thread(target=Stage_2, args=("task",))
S2t.start()
S3t = threading.Thread(target=Stage_3, args=("task",))
S3t.start()
while 1:
#Connect to SQL
if(SQL_Status == False):
connect_to_database()
if(SQL_Status == True and RFID_Status == False):
connect_to_RFID()
if(SQL_Status == True and RFID_Status == True):
check()
if S1t.is_alive() is False:
S1t = threading.Thread(target=Stage_1, args=("task",))
S1t.start()
if S2t.is_alive() is False:
S2t = threading.Thread(target=Stage_2, args=("task",))
S2t.start()
if S3t.is_alive() is False:
S3t = threading.Thread(target=Stage_3, args=("task",))
S3t.start()
window.Refresh()
(event, value) = window.Read(timeout=1)
if event == 'Debug ON/OFF':
if enable_debug == 'True':
enable_debug = 'False'
print('Debug Mode OFF')
else:
enable_debug = 'True'
if event == 'Movement monitoring ON/OFF':
if debug_only_movement == 'True':
debug_only_movement = 'False'
print('Movement monitoring OFF')
else:
debug_only_movement = 'True'
print('Movement monitoring ON')
if event == sg.WIN_CLOSED or event == 'Exit':
break
def Position_in_Array (string,Position,array):
print('Dlzka Array')
print(len(array))
Start_Position = Position
print('Dlzka Stringu')
print(len(string))
Data = len(string)
#data after position
array_after_inserted_data = array[Data:]
print('Kolko ostalo potom')
print(len(array_after_inserted_data))
#data before position actual position -
Data_before_pos = Start_Position - Data
print('Kolko pozicii vpred uchovaj')
print(Data_before_pos)
array_before_inserted_data = array[:Data_before_pos]
output = array_before_inserted_data + string + array_after_inserted_data
print('Dlzka Vystupu')
print(len(output))
return output
print(Position_in_Array('1000',32, '00000000000000000000000000000000'))Vysledok Dlzka Array
32
Dlzka Stringu
4
Kolko ostalo potom
28
Kolko pozicii vpred uchovaj
28
Dlzka Vystupu
60
000000000000000000000000000010000000000000000000000000000000def Position_in_Array (string,Position,array):
Start_Position = Position
string = string
Data_lenght = len(string)
Data_after_position = int(Data_lenght)
#data after position
array_after_inserted_data = array[Position:]
#data before position actual position -
Data_before_pos = Start_Position - Data_lenght
array_before_inserted_data = array[:Data_before_pos]
output = array_before_inserted_data + string + array_after_inserted_data
return output
print(Position_in_Array('1000',32, 'ABCDERTAGSHDJFKWORKDBANDREDBVAD'))print(Position_in_Array('1000',4, 'ABCDERTAGSHDJFKWORKDBANDREDBVAD')) print(Position_in_Array('1000',32, 'ABCDERTAGSHDJFKWORKDBANDREDBVAD'))tak vysledok jedata = '00000010000000000101000010110100'
def data_to_hexa(data):
hd = (len(data) + 3) // 4
output = '{:0{}x}'.format(int(data, 2), hd)
return output
print(data_to_hexa(data))
PS C:\Users\t> & python c:/test/convert.py
020050b4