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???