Skocz do zawartości

Slap


Compi

Rekomendowane odpowiedzi

  • Odpowiedzi 69
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Top użytkownicy w tym temacie

W sensie auto-generowanie kodu przez designer?

To by było super :D

 

BTW. Język będzie obiektowy czy strukturalny (czy może oba na raz)?

Oba naraz

Designer generuje kod.

Każda akcja wykonana na formie ma swoje id.

Każdy element ma swoje id

Slap wykonuje nieskończoną pętle, rejestrując wiadomości z form i wykonuje napisany przez nas kod.

 

Podobnie działa delphiak. Nikt nie widział pewnie pętli WndProc, ale ona jest

Odnośnik do komentarza
Udostępnij na innych stronach

Nie lepiej SFML? Ładny, obiektowy i prosty.

 

Skoro będzie można używać natywnych dll'i to mogę przerobić DotNetGMCrossover na twój język jeśli znajdę czas.

 

Nie ma nic w stylu Canvasa w HTML5?

 

Jeżeli chodzi o twoją dllkę, to powiedz mi, czy argumenty są układane na stosie w stylu stdcall?

Jeśli tak to nic nie trzeba przerabiać :)

Odnośnik do komentarza
Udostępnij na innych stronach

Nie ma nic w stylu Canvasa w HTML5?

 

Jeżeli chodzi o twoją dllkę, to powiedz mi, czy argumenty są układane na stosie w stylu stdcall?

Jeśli tak to nic nie trzeba przerabiać :)

Źródła są dołączone. Zresztą spójrz na skrypty w gml jak wywoływana jest funkcja i spokojnie przeniesiesz to na Slapa.

Gdybyś potrzebował innych typów niż char* i double to pisz.

Jak chcesz mogę już od razu skompilować binarkę na .NET 4, bo 4.5 nie ma na XP.

 

Konkretnie to najpierw czyścisz listę z argumentami (ClearArguments), wrzucasz po kolei argumenty funkcjami "AddStringArgument" i "AddRealArgument", później wywołujesz "StringMethod" lub "RealMethod" (w zależności co zwraca) i voila.

Odnośnik do komentarza
Udostępnij na innych stronach

W slapie jest limit pięciu argumentów w wywołaniu call nazwa(arg1,arg5).

Ale w natywnym kodzie jest limit 20 argumentów, które są umieszczne w wirtualnych rejestrach RG0..RG19 i odkładane na stosie od najstarszego do najmłodszego.

Odnośnik do komentarza
Udostępnij na innych stronach

Najlepiej integer.

Jeśli to będzie string to niech zwraca wskaźnik

 

@EDIT:

 

zwracany typ (ty_string lub ty_real)

 

Ten argument w dotnet_method to string?

 

@@EDIT:

 

Stary, nawet nie wiesz jak ci dziękuję. Teraz Slap będzie mógł korzystać z .NET Frameworka :)

Odnośnik do komentarza
Udostępnij na innych stronach

Najlepiej integer.

Jeśli to będzie string to niech zwraca wskaźnik

 

@EDIT:

 

 

 

Ten argument w dotnet_method to string?

char*

gm to traktuje jako string

źle zrozumiałem.

gml sprawdza czy dałeś tam ty_real czy ty_string i wywołuje odpowiednią funkcję z dll'a

Po prostu wpisujesz ty_real bądź ty_string, w zależności jaki typ jest zwracany, tak jak przy definiowaniu zwykłych dll (external_define) w gm.

Obczaj zresztą skrypt ;p

 

@EDIT Tak wgl to sprawdzałeś czy działa w slapie ten dla GM'a?

@@EDIT:

 

Stary, nawet nie wiesz jak ci dziękuję. Teraz Slap będzie mógł korzystać z .NET Frameworka :)

Czyli działa? :)

 

 

@EDIT Skończyłem :D

 

Link: https://gmclan.org/up8194_3_DotNetSlapCrossover1_0.html

W środku binarki dla .NET 4 oraz 4.5, source oraz przykłady. Testowałem importowanie funkcji przez P/Invoke w c# bo już mnie denerwowało cpp ;p (czyli zarządzany program odwoływał się do mieszanej biblioteki która z kolei odwoływała się do dynamicznie ładowanego, zarządzanego dll)

 

Dodałem więcej typów do wykorzystania(kwestia dopisania paru linijek). Poniżej lista typów oraz ich odpowiedników w .NET.

Nie zapomniałem oczywiście o LPVOID. W .NET to System.IntPtr.

char* to System.String.(tego też nie ma w tej tabelce)

w7ekj5.png

 

Tutaj taka lista co możesz zaimportować (wycinek z kodu):

//#########################
//AUTHOR OF DLL: Utermiko #
//#########################

#define EXPORT extern "C" __declspec(dllexport)

EXPORT int LoadDll(char* path);
EXPORT int CreateObject(int assemblyId, char* namespaceAndClass);
EXPORT int RemoveObject(int objectId);

EXPORT int ClearArguments();
EXPORT int AddStringArgument(char* value);//System.String
EXPORT int AddCharArgument(char value);//System.SByte
EXPORT int AddUCharArgument(unsigned char value);//System.Byte
EXPORT int AddDoubleArgument(double value);//System.Double
EXPORT int AddFloatArgument(float value);//System.Float
EXPORT int AddIntArgument(int value);//System.Int32
EXPORT int AddUIntArgument(unsigned int value);//System.UInt32
EXPORT int AddShortArgument(short value);//System.Int16
EXPORT int AddUShortArgument(unsigned short value);//System.UInt16
EXPORT int AddLongArgument(long value);//System.Int64
EXPORT int AddULongArgument(unsigned long value);//System.UInt64
EXPORT int AddLPVOIDArgument(LPVOID value);//System.IntPtr

EXPORT char* InvokeStringMethod(int objectId, char* methodName);//System.String
EXPORT char InvokeCharMethod(int objectId, char* methodName);//System.SByte
EXPORT unsigned char InvokeUCharMethod(int objectId, char* methodName);//System.Byte
EXPORT double InvokeDoubleMethod(int objectId, char* methodName);//System.Double
EXPORT float InvokeFloatMethod(int objectId, char* methodName);//System.Float
EXPORT int InvokeIntMethod(int objectId, char* methodName);//System.Int32
EXPORT unsigned int InvokeUIntMethod(int objectId, char* methodName);//System.UInt32
EXPORT short InvokeShortMethod(int objectId, char* methodName);//System.Int16
EXPORT unsigned short InvokeUShortMethod(int objectId, char* methodName);//System.UInt16
EXPORT long InvokeLongMethod(int objectId, char* methodName);//System.Int64
EXPORT unsigned long InvokeULongMethod(int objectId, char* methodName);//System.UInt64
EXPORT LPVOID InvokeLPVOIDMethod(int objectId, char* methodName);//System.IntPtr

 

 

@EDIT Nie zapomnij użyć "ClearArguments" przed dodawaniem argumentów do wywołania innej metody. Najczęściej na tym można się złapać :P

@EDIT2 Jeszcze jedno. Przy "LoadDll" trzeba podawać PEŁNĄ ścieżkę.

@EDIT3 Nie testowałem wszystkich funkcji Invoke... i Add... , ale powinny działać.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja proponuję, byś napisał to w .Not 2.0, bo:

- Większość ma Not 2.0

- Kopatybilny z Mono

- .Not 4.0 / 4.5 to 8'ka lub update 7'ki

 

Fervi

Tyle, że .NET 2 w porównaniu do .NET 4 ma bardzo małe możliwości. To nie tylko rozszerzenie o kilka klas.

Do tego po co używać przestarzałego oprogramowania skoro i tak nieliczne osoby używają win 2000 i starsze systemy.

 

.NET 4 to xp, vista, 7 i 8.

.NET 4.5 to 7 i 8 (i vista jeszcze chyba)

 

.NET 4.5 jest i tak tylko rozszerzeniem 4 o parę przydatnych klas i innych dupereli. CLR dalej jest ten sam.

 

 

To jest napisane w C++/CLI, a Mono chyba tego nie obsługuje.

Jak chcesz to się baw w portowanie na Mono. Dołączyłem source przecież.

 

PS. Jak piszesz "Not" to nie jesteś fajny.

 

@EDIT Compi, tak z ciekawości. Po co Ci LPVOID? Jakieś specyficzne zastosowanie?

Na językach zarządzanych wskaźniki przydają się wg. mnie tylko przy importowaniu natywnych dlli.

Odnośnik do komentarza
Udostępnij na innych stronach

Tyle, że .NET 2 w porównaniu do .NET 4 ma bardzo małe możliwości. To nie tylko rozszerzenie o kilka klas.

Do tego po co używać przestarzałego oprogramowania skoro i tak nieliczne osoby używają win 2000 i starsze systemy.

 

.NET 4 to xp, vista, 7 i 8.

.NET 4.5 to 7 i 8 (i vista jeszcze chyba)

 

.NET 4.5 jest i tak tylko rozszerzeniem 4 o parę przydatnych klas i innych dupereli. CLR dalej jest ten sam.

 

 

To jest napisane w C++/CLI, a Mono chyba tego nie obsługuje.

Jak chcesz to się baw w portowanie na Mono. Dołączyłem source przecież.

 

PS. Jak piszesz "Not" to nie jesteś fajny.

 

@EDIT Compi, tak z ciekawości. Po co Ci LPVOID? Jakieś specyficzne zastosowanie?

Na językach zarządzanych wskaźniki przydają się wg. mnie tylko przy importowaniu natywnych dlli.

 

Bo to jest technologia .Not

 

Ja tam nie wiem co Compi chce, ale z tego co wiem to planuje port na Linuksa, a tam Mono

 

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

Bo to jest technologia .Not

Tyle, że to nie jest nawet w najmniejszym stopniu śmieszne :P

Nie musisz publicznie przedstawiać swojego wstrętu do MS. (w następnym poście fervi napisze M$).

 

Ja tam nie wiem co Compi chce, ale z tego co wiem to planuje port na Linuksa, a tam Mono

W jaki sposób chcesz to osiągnąć? Pod Mono da się odpalić binarki C++/CLI?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...