Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 25 kwi 2024, o 18:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 24 kwi 2020, o 19:37 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Witam,

Mam pytanko do osób znających się na C# bo ja, gdybym powiedział, że raczkuję to bym skłamał - jestem jeszcze co najmniej 5-6 etapów przed raczkowaniem w C# ;)

Ale do rzeczy, (być może to niemożliwe) ale na przykładach też pokażę do czego mi udało się dojść i osiągnąć pewien pozytywny efekt no ale nie do końca.

Chodzi o to, że chciałbym odtworzyć sobie w C# pewną hmmm strukturę (a najlepiej gdybym mógł utworzyć typ strukturalny) tak jak w czystym C

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ale ok może być sama struktura, w Dephi mam rekord ale chodzi o to, że to MUSI być ZWART obszar pamięci bo będzie do niego wrzucał dane jakiś plik DLL który nie był pisany pod C#

krótko mówiąc mały przykład na początek w Pascalu:

Składnia: [ Pobierz ] [ Ukryj ]
język pascal
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ok gdybym miał to sobie przerzucić do C to zrobiłbym to tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to tak poglądowo żeby zrozumieć co potrzebuję uzyskać - może to pomoże ten widok w C ... no ale teraz ruszam do walki z C# i stworzyłem po długiej walce z netem ;) coś takiego - tylko się nie śmiejcie proszę ;)


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Krótko mówiąc muszę stworzyć konkretną strukturę która będzie odzwierciedlała 1:1 jak chodzi o rozmiar w BAJTACH tą strukturę z Delphi albo tą którą pokazałem w C, bo później muszę ją przekazać jako argument do jakiejś funkcji z DLL i to DLL będzie ją napełniał ale patrząc na nią przez pryzmat właśnie takich pól/pamięci jak w Delphi czy C

chodzi mi o jakieś chociaż naprowadzenie, podpowiedź może kierunek gdzie szukać ;) Może można całkiem inaczej podejść do tego niż ja tu zacząłem w C#

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2020, o 22:56 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Zadeklarowanie rozmiaru tablicy public byte[] name = new byte[255]; lub drugiej TPOINT[] myarr1 = new TPOINT[10]; sprawia że się kompiluje.
Wydaje mi się, że kompilator nie może się połapać jak na początku struktury i na jej końcu ma tablice o niby nieznanym rozmiarze, byłem pewien, że rozmiar sobie wyliczy z zadeklarowanych indeksów ale to chyba za dużo dla C# :) Jak mu się poda rozmiar co najmniej jednej to przestaje protestować.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 07:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Nie nie ubranie tego w klasę zamiast struktury to już zupełnie burzy wszystko bo później klasa nie może być napełniona bajtami przez jakąś funkcję w DLL która widzi tylko przez wskaźnik jakiś obszar pamięci. I wg C# próbuje wgrać coś do chronionego obszaru klasy.

Udało mi się za to już coś z tą strukturą żeby przeszło ale musiałem zrobić dziwne przesunięcie offsetu i teraz się przynajmniej i kompiluje i napełnia w funkcji z DLL'a ale niestety - dane nie są umieszczone do końca prawidłowo

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


próbowałem już dla uproszczenia też tak

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 08:11 
Offline
Nowy

Dołączył(a): 21 lip 2015
Posty: 13
Lokalizacja: Północny-Zachód
Pomógł: 2

Kiedyś było prościej pisać programy ;)
Dobranie się do zamkniętych DLL z programu w C# to ciężki temat i dużo błota do przepchnięcia.

Trzeba zwrócić uwagę na kilka rzeczy:
    1. typy danych - mają różne rozmiary w C i C# - int w C ma 2 bajty, w C# ma 4 bajty
    2. ciągi znakowe - w C, C++ jeden znak to jeden bajt, C# pracuje na unicode jeden znak to 2 bajty
    3. wskaźniki - w zależności od architektury na jaką piszemy (32/64 bit) są 4 lub 8 bajtowe
    4. optymalizacje kompilatora - aby poukładał strukturę tak jak my chcemy

W przypadku ciągów tekstowych rozwiązaniem jest wskazanie że struktura ma mieć kodowanie ansi
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Może zamiast się bawić w ustawianie pól to zastosować Pack. Mi kiedyś pomogło :)
Pole Pack kontroluje wyrównanie pól w pamięci. Dotyczy zarówno LayoutKind.Sequential, jak i LayoutKind.Explicit. Wartość domyślna to 0, co wskazuje domyślny rozmiar pakowania dla bieżącej platformy. Wartość Pack musi być równa 0, 1, 2, 4, 8, 16, 32, 64 lub 128

Przykład pisany bez kompilatora, nie sprawdzany...

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 09:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Jarcio --> tak tak zdaję sobie sprawę właśnie z tych wszystkich różnic o których piszesz - ale dlatego właśnie największy problem sprawia mi zapakowanie innych struktur do struktury. Bo w przypadku pojedynczych zmiennych - typu ushort u mnie bo to też dwa bajty w C# ładnie mi to już działa ...

gorzej z tymi strukturami

Ze stringami sobie poradziłem na razie poprzez ich zamianę na byte[] bo DLL korzysta z kodowania ANSI ale spróbuję też za chwilę zamiast byte[] dać char[] i dodać to dekodowanie ANSI tak jak pokazałeś wyżej

tak więc dzięki za wskazówki ale nadal pozostaje nierozwiązany u mnie problem z tym jak to zrobić z tymi tablicami

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 10:30 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

ok temat rozwiązałem ;) dzięki sugestiom kolegi Jarcio - tzn musiałem jeszcze troszkę pokombinować i na końcu wyszło mi to z tym Pack ale Pack = 0, i nie Explicit tylko tym Sequential no i kodowanie ANSI dzięki czemu tablice gdzie miałem stringi mogłem zamienić z byte[] na char[] i teraz jest pięknie !

W terminie nieco późniejszym zdradzę do czego mi to było potrzebne i wszyscy się o tym dowiedzą ;) a może już niektórzy podejrzewają dlaczego się brzydko bawię z C# ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 13:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1148
Lokalizacja: Kraków
Pomógł: 93

mirekk36 napisał(a):
a może już niektórzy podejrzewają dlaczego się brzydko bawię z C#
To na pewno ma związek z purple bookiem :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 15:00 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Marhef napisał(a):
To na pewno ma związek z purple bookiem

no nie nie .... aż tak daleko to nie ;) ale do pomarańczy bliżej ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2020, o 12:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1148
Lokalizacja: Kraków
Pomógł: 93

Taki żarcik z mojej strony. W którymś filmiku o OB wspominaliście, że aplikacje w C# pisze Paweł, więc spodziewałem się, że to pytanie odnośnie tego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2020, o 12:52 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Marhef napisał(a):
Taki żarcik z mojej strony. W którymś filmiku o OB wspominaliście, że aplikacje w C# pisze Paweł, więc spodziewałem się, że to pytanie odnośnie tego.


No właśnie ... połączyliśmy siły z Pawłem - bo ja totalna noga w tym środowisku ale z kolei znam Delphi i wiem jak w Delphi to zrobić - a więc może wyjdzie z tego coś ciekawego także dla tych co mają dreszcze obrzydzenia gdy słyszą o Delphi a za to rozpływają się jak pączki w maśle gdy słyszą o przykładach w C# ;) ... może się uda ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2020, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1148
Lokalizacja: Kraków
Pomógł: 93

To będzie większy Frankenstein niż MIS(I)O :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 kwi 2020, o 20:04 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Frankensteiny to kiedyś Sun na forum pokazywał...
No ale ostatnio pewnie nie ma na to czasu :-(

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO