C++ scappare dalla gm sandbox

Discussioni su qualunque linguaggio di programmazione o engine
Rispondi
Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

C++ scappare dalla gm sandbox

Messaggio da Barnack »

Salve a tutti. Volevo fuggire dalle limitazioni autoimposte di gm. L'idea era di usare le mie piccole conoscenze di c++ per fare due funzioni (get-set) che mi facciano copiare dei files dentro e guori la cartella appdata\local\<gioco>.

Tutto bello se non fosse che CON STRINGHE UNICODE E TIPI STRANI NON CI STO CAPENDO UN PORCOSPINO!

Doveva essere una cosa da 10 righe e 10 minuti, è diventato uno spreco di 50 righe e 5 ore -.-

Vi posto lo schifo di codice cui sono giunto (che non va per inciso)
Da errore in esecuzione su gm. Potrei benissimo aver sbagliato con le funzioni wcsncat_s e nell'utilizzo del tipo TCHAR, non le conoscevo fino ad oggi (non mi lasciava usare wcsncat, non so che differenza ci sia).
Spoiler

Codice: Seleziona tutto

#include "stdafx.h"
#include <iostream>
#include <WinBase.h>
#include <windows.h>
#include <Pathcch.h>
#include <Shlobj.h>
#define GMEXPORT extern "C" __declspec (dllexport)

GMEXPORT double get_file(char * path, char * filename)
	{
	//input to unicode
	wchar_t infilename[MAX_PATH];
	wchar_t inpath[MAX_PATH];
	MultiByteToWideChar(CP_ACP, 0, path, strlen(path), inpath, strlen(path));
	MultiByteToWideChar(CP_ACP, 0, filename, strlen(filename), infilename, strlen(filename));
	//get environmental variables
	TCHAR appdata[MAX_PATH];
	TCHAR userprofile[MAX_PATH];
	SHGetSpecialFolderPath(NULL, appdata, CSIDL_APPDATA, FALSE);
	SHGetSpecialFolderPath(NULL, userprofile, CSIDL_PROFILE, FALSE);
	//get game folder and chain file path
	wcsncat_s(appdata, L"\\SideBar_Settings\\", MAX_PATH);
	std::cout << "GAMEPATH: " << appdata << std::endl;
	wcsncat_s(userprofile, inpath, MAX_PATH);
	wcsncat_s(userprofile, L"\\", MAX_PATH);
	std::cout << "FILEPATH: " << userprofile << std::endl;
	//get full game+file and path+file
	wcsncat_s(appdata, infilename, MAX_PATH);
	std::cout << "FROM: " << appdata << std::endl;
	wcsncat_s(userprofile, infilename, MAX_PATH);
	std::cout << "TO: " << userprofile << std::endl;
	//finally copy
	if (CopyFile(appdata, userprofile, 0))
		{
		return(1.0);
		}
	else
		{
		std::cout << "C++Lib ERROR: " << GetLastError() << std::endl;
		return(0.0);
		}
	}
Gradirei qualsiasi forma di correzione o pappapronta commentata, perché sto davvero impazzendo.

Il codice dovrebbe:
funzione get:
1) prendere il nome di un file (var_file), prendere un percorso (var_percorso)
2) copiare %userprofile%\var_percorso\var_file
in
%localappdata%\nomegioco\var_file

funzione set dovrebbe fare l'inverso.

Any help???

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Barnack »

Lo so che non libero la memoria etcc etcc, ma la priorità per ora è farlo funzionare...

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Xxshark888xX »

Guarda, io farei in un altro modo:

Ti crei un .exe piccolo piccolo con qualche riga di codice che non fa altro che prendere come parametri (trasmessi dal .exe di GM) il file da spostare e la path dove deve essere spostato.
Quindi, tramite il tuo .exe creato con GM salvi il file che devi salvare nei limiti del sandbox, poi avvii l'exe creato scritto in C++ e il programma non fara' altro che spostare il file salvato al di fuori dei limiti sandbox. E' abbastanza "macchinoso" pero' cosi' risolvi :asd:

(Spero di essere riuscito a spiegarmi, altrimenti lo creo io (in C# dato che non conosco bene il C++) e ti fai un'idea di come deve funzionare)
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Barnack »

Ti sei perso un piccolo dettaglio... Game maker studio ha deprecato la funzione che permette di avviare altri eseguibili xD
Se nessuno che sa qualcosa di c++ ha da proporre qualche correzione mi andrebbe benissimo anche una dll analoga in C# (magari col sorgente così do un occhio)

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Xxshark888xX »

Azz, questo proprio non lo sapevo :asd:

Comunque, se domani ho tempo, cerco di creare qualcosa!
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Barnack »

Mi faresti un grosso favore :)

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da cp94 »

Sei sicuro che le abbiano tolte?
Io avevo letto che erano semplicemente state rinominate, per esempio execute_shell è diventato shell_execute (o shell_open).
Poi c'erano altre funzioni, tra cui execute_program ed external_call, che non so se o come siano state cambiate/eliminate.
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Barnack »

Si ne sono sicuro.
Ho ricontrollato e... sicurezza fondata :\
Conto su shark che crea qualcosa :asd: Purtroppo i miei professori sono linuxiani incalliti quindi se anche volessero non saprebbero dirmi niente sulle funzioni di Windows (cioè neanche ascolterebbero la mia domanda)

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Xxshark888xX »

Barnack ha scritto:Si ne sono sicuro.
Ho ricontrollato e... sicurezza fondata :\
Conto su shark che crea qualcosa :asd: Purtroppo i miei professori sono linuxiani incalliti quindi se anche volessero non saprebbero dirmi niente sulle funzioni di Windows (cioè neanche ascolterebbero la mia domanda)
Hey scusa, ma questi giorni sono stato un poco occupato e sinceramente non ho provato a fare nulla.
Inoltre cercando un poco su internet leggo che GM non va proprio a braccetto con le .dll realizzate in C#, quindi ho cercato ancora e ho trovato questa .dll gia' pronta.
Non l'ho testata, quindi non so se funziona, prova e fammi sapere!

E qui un source code (in C++) di una .dll che dovrebbe fare proprio cio' che ti serve.
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Barnack »

C'è un piccolo problemino con la dll che hai linkato... Tipo che è del 2014 ed il file non è più reperibile xD

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Xxshark888xX »

Barnack ha scritto:C'è un piccolo problemino con la dll che hai linkato... Tipo che è del 2014 ed il file non è più reperibile xD
Il sourcecode pero' e' ancora valido, e l'ultimo update e' di 6 mesi fa, lo hai controllato?
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Barnack »

Il codice che hai mandato lo guarderò finiti gli esami che avrò, tempo, per ora se a qualcuno interessasse sto usando questo:
https://yal.cc/gamemaker-windows-functi ... er-studio/

Non so why ma prima non l'avevo mai trovato

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
Alv
Membro
Messaggi: 133
Iscritto il: 14/11/2014, 22:33
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Sicilia
Contatta:

Re: C++ scappare dalla gm sandbox

Messaggio da Alv »

Mi pare la libreria GMFileSystem faccia al caso tuo:
http://gmc.yoyogames.com/index.php?showtopic=567528

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti