Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - patilanz

#261
Foro Libre / Re: El cerebro y la IA
29 Diciembre 2014, 23:44 PM
Citarimplantan un chip durante una semana que recoge toda la informacion y despues de esa semana al introducirla en lo que seria el pc, se comporta como la persona que le habrian introducido el chip

Lo insertan para una semana y luego se comporta igual que la persona??  :D Yo creo que para una semana no podría recoger los datos suficientes ya que en este caso estaría recogiendo datos de lo que ha hecho durante esta semana y no del cerebro en si.
#262
Programación C/C++ / Re: Crear dll dinamicos
29 Diciembre 2014, 19:36 PM
Funciona  ;-)!
Ahora estoy leyendo que es exactamente lo que hace pero tengo otra duda.
Si creo dos funciones que tienen diferentes argumentos como los llamo porque GetProcAddress solo me deja poner el nombre ? Y para clases ?
He visto que si quito el lib que me genera también funciona. Que contiene y es necesario?

Gracias

@Edit: extern "C" es solo para visual studio?
#263
Programación C/C++ / Re: Crear dll dinamicos
29 Diciembre 2014, 17:14 PM
La verdad es que he publicado diferentes códigos  :rolleyes: Publique la versión antigua que probé (int sumar(int,int)) y luego lo cambie por void para probar algo mas simple pero seguía igual:

Ahora es así:

Código (cpp) [Seleccionar]
#include <Windows.h>
#include <iostream>

using namespace std;

typedef void(* F)();

#pragma comment(lib,"dll_test1.lib")


int main(){
HMODULE library = LoadLibraryA("dll_test1.dll");
if (library){
cout << "ok";
}
F ptr = (F)GetProcAddress(library, "sumar");


(*ptr)();

getchar();

return 0;
}


Código (cpp) [Seleccionar]
__declspec (dllexport) void sumar();

Código (cpp) [Seleccionar]
#include <iostream>
__declspec(dllexport) void sumar(){
std::cout << "Functiona!";
}


Perdón por el lió pero sigue sin funcionar.

ivancea96 donde se agrega lo de extern?

Lo edite también arriba
#264
Programación C/C++ / Re: Crear dll dinamicos
29 Diciembre 2014, 13:46 PM
Ya me di cuanta del error pero sigue igual .No es por el nombre. Ya lo cambie arriba.
#265
Programación C/C++ / Crear dll dinamicos
29 Diciembre 2014, 01:54 AM
Estoy intentando hacer un dll para después poder utilizar su función.

Desde visual studio 2013 creo nuevo proyecto de consola win32 vació. Luego le agrego un archivo hpp y cpp. Compilo. Me sale el dll.

Creo otro proyecto y lo intento cargar con:
Código (cpp) [Seleccionar]
#include <Windows.h>
#include <iostream>

using namespace std;

typedef void(* F)();

#pragma comment(lib,"dll_test1.lib")


int main(){
HMODULE library = LoadLibraryA("dll_test1.dll");
if (library){
cout << "ok";
}
F ptr = (F)GetProcAddress(library, "sumar");


(*ptr)();

getchar();

return 0;
}


Me carga bien la library pero luego me sale error al intentar utilizar la función.
Con Alternate DLL Analyzer vi que en la dll no hay funciones.
Que hago mal?

Saludos

@Edit: Los codigo del dll

dll_test.hpp
Código (cpp) [Seleccionar]
__declspec (dllexport) void sumar();
dll_test.cpp
Código (cpp) [Seleccionar]
#include <iostream>
__declspec(dllexport) void sumar(){
std::cout << "Functiona!";
}
#266
Bueno puede que le rediculisen pero somos libre de decir nuestra oposición opinión .Seria mejor que Correa no se lo tome tan enserio.
#267
Yo pensaba que se juntan los binarios de ambos y cuando ejecutas por ejemplo un vídeo se ejecuta el vídeo y el virus. Ahora al pensarlo no le veo mucha lógica  :rolleyes:

#268
Seria lo mismo que una imagen no?
Se ejecutan dos cosas en un archivo.
#269
Yo hice un programa algo similar pero el mio copiaba archivos. Se ejecuta cada vez con el pc y espera a que se conecte un pendrive para localizar unos archivos y copiarlos en una carpeta del pc.

Tu puede lo mismo pero que cuando el profesor abra tu vídeo también se ejecute el ejecutable del programa juntandolos y haces que se ejecute cada vez con el pc y dentro de dos semanas busca (por nombre y contenido) y borre el vídeo y a si mismo.
#270
Hola gracias por tu respuesta. Ya creo que tengo lo que me dijiste.

http_class.cpp
Código (cpp) [Seleccionar]
//HTTP_class v2.0
//Autor: patilanz

#ifndef HTTP_CLASS_HPP
#define HTTP_CLASS_HPP

#include <string>
#include <ctime>
#include <vector>
#include "http_config.hpp"

using namespace std;


//CLASS STATE
enum class_state{ SETUP_OK, SETUP_NEED, INVALID_HEADER, INVALID_URL, SOCK_ERROR, CONNECTION_TIME_OUT, CONNECTION_REFUSED, UNKNOW_ERROR, SEND_ERROR, INVALID_RESPONSE };

//HTTP CODES

//Informational
#define H_Continue 100
#define H_Switching_Protocols 101
#define H_Processing 102
//... no lo pongo para no ocupar espacio en el foro. Es como antes



class HTTP{
public:
HTTP();
HTTP(string url, string request = "", int port = 80);
HTTP(string url, HTTP_config config, int port = 80);

bool get(string url, string request = "", int port = 80);
bool get(string url, HTTP_config config, int port = 80);
bool get(string request = "", int port = 80);

bool setHeader(string header);
void setContent(string content);
bool setUrl(string url);

const int State();//class status

string Header();
string Content();

int Code();//HTTP status
tm Date();
string Server();
tm Last_Modified();
string ETag();
string Content_Type();
int Content_Lenght();
string Connection();

string getHost();
string getPath();
string getUrl();



string Other(string name);
vector<string> Other(int i);

//helpful functions
double HTTPVersion();
int Size();//Size of fields


private:
int state;//Already setup?

int code;
tm date;
string server;
tm last_modified;
string etag;
string content_type;
int content_length;
string connection;
double version;

string host;
string path;
string url;

string header;
string content;

vector < vector<string> > all; //all fields

const int recv_size = 1024;


//helpful functions
void WSAStart();
vector<string> split(string full, string part);

//Config functions
tm getDate(string date);
void defaultConfig();
};



#endif


http_class.cpp
Código (cpp) [Seleccionar]
#include "http_class.hpp"
#include <regex>
#include <WinSock2.h>

HTTP::HTTP(){
defaultConfig();
}

HTTP::HTTP(string url, string request, int port){
defaultConfig();
get(url, request, port);
}

HTTP::HTTP(string url, HTTP_config config, int port){
get(url, config, port);
}




string HTTP::Other(string name){
for (int i = 0; i < all.size(); i++){
if (all[i][0] == name){
return all[i][1];
}
}
return "";
}
vector<string> HTTP::Other(int i){
if (i < all.size())
return all[i];
else
return vector<string>();
}


bool HTTP::get(string _url, string _request, int port){
smatch match;
if (regex_search(_url, match, regex("(http|https)?:?(\\/\\/)?([^/]{5,})([^\\t\\n\\v\\r]*)"))){
url = _url;
host = match[3];
path = match[4];
if (path.size() < 1)
path = "/";

hostent * _host;
in_addr ip;
sockaddr_in data;
string request;


_host = gethostbyname(host.c_str());
ip.s_addr = *(long*)_host->h_addr_list[0];

SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET){
state = SOCK_ERROR;
return false;
}
memset(&data, 0, sizeof(sockaddr_in));
data.sin_addr = ip;
data.sin_family = AF_INET;
data.sin_port = htons(port);

if (connect(sock, (sockaddr*)&data, sizeof(sockaddr_in))){
if (WSAGetLastError() == WSAETIMEDOUT){
state = CONNECTION_TIME_OUT;
}
else if (WSAGetLastError() == WSAECONNREFUSED){
state = CONNECTION_REFUSED;
}
else{
state = UNKNOW_ERROR;
}
return false;
}
if (_request.size() > 0)
request = _request;
else{
request += "GET " + path + " HTTP/1.1\r\n";
request += "Host: " + host + "\r\n";
request += "Connection: close\r\n";
request += "\r\n";
}
if(send(sock, request.c_str(), request.size(), 0) != request.size()){
state = SEND_ERROR;
return false;
}
//Accept
char *buffer = new char[recv_size]; // No se me ocurrio otra manera de usar una variable const int de la clase
int lastBytes = recv_size - 1;
string response;

while (lastBytes > 0){
lastBytes = recv(sock, buffer, recv_size, 0);
if (lastBytes > 0)
response += string(buffer).substr(0, lastBytes);
}
if (response.find("\r\n\r\n") == -1){
state = INVALID_RESPONSE;
return false;
}
setHeader(response.substr(0, response.find("\r\n\r\n") + 4));
setContent(response.substr(response.find("\r\n\r\n") + 4, response.size()));





delete[recv_size] buffer;
return true;

}else{
state = INVALID_URL;
return false;
}
}

bool HTTP::get(string url,HTTP_config config, int port){
setUrl(url);
string request = config.getGet() + "\r\n";
for (int i = 0; i < config.size(); i++){
request += config[i][0] + ": " + config[i][1] + "\r\n";
}
request += "\r\n";
return get(request, port);
}

bool HTTP::get(string request, int port){
return get(url, request, port);
}



bool HTTP::setHeader(string _header){
vector<string> parts = split(_header, "\r\n");

//all setup
for (int i = 1; i < parts.size(); i++){
all.push_back(split(parts[i],": " ));
}
all.pop_back();          // remove last 2 \r\n of the end of http protocol
all.pop_back();          //
//end
if (all.size() < 1){ //Nothing founded
state = INVALID_HEADER;
return false;
}
header = _header;


//http setup
string v = parts[0].substr(5, 3);
version = atof(v.c_str());
code = atoi(parts[0].substr(8, 4).c_str());
//end
date = getDate(Other("Date"));
server = Other("Server");
last_modified = getDate(Other("Last-Modified"));
etag = Other("ETag");
content_type = Other("Content-Type");//Mejores en 2.0
content_length = atoi(Other("Content-Length").c_str());
connection = Other("Connection");
state = SETUP_OK;
return true;
}

void HTTP::setContent(string c){
content = c;
}

bool HTTP::setUrl(string _url){
if (regex_match(_url, regex("(http|https)?:?(\\/\\/)?([^/]{5,})([^\\t\\n\\v\\r]*)"))){
url = _url;
return true;
}
return false;
}

int HTTP::Code(){
return code;
}

const int HTTP::State(){
return state;
}

tm HTTP::Date(){
//Example of check
if (date.tm_year != 0 && state == SETUP_OK){ // if == 0 no date in header
return date;
}
}
string HTTP::Server(){
return server;
}
tm HTTP::Last_Modified(){
return last_modified;
}
string HTTP::ETag(){
return etag;
}
string HTTP::Content_Type(){
return content_type;
}
int HTTP::Content_Lenght(){
return content_length;
}
string HTTP::Connection(){
return connection;
}


//Gets

string HTTP::getHost(){
return host;
}
string HTTP::getPath(){
return path;
}
string HTTP::getUrl(){
return url;
}


string HTTP::Header(){
return header;
}
string HTTP::Content(){
return content;
}



//Helpful functions
double HTTP::HTTPVersion(){
return version;
}
int HTTP::Size(){
return all.size();
}





tm HTTP::getDate(string _date){ //Get date in tm format for example in Date or Last-Modified
tm date = tm();
if (_date.size() > 0){
const static string months[] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
smatch match;
if (_date.find("GMT") != -1){ // New format
if (regex_search(_date, match, regex("^\\w{3,9},\\s(\\d{2})[\\s\\-](\\w{3})[\\s\\-](\\d{2,4})\\s(\\d{2}):(\\d{2}):(\\d{2}) GMT$"))){
date.tm_mday = atoi(match[1].str().c_str());
int month;
for (int i = 0; i < sizeof(months); i++){
if (months[i] == match[2].str()){
month = i;
break;
}
}
date.tm_mon = month;
int year = atoi(match[3].str().c_str());
if (year > 1900)
year -= 1900;
date.tm_year = year;
date.tm_hour = atoi(match[4].str().c_str());
date.tm_min = atoi(match[5].str().c_str());
date.tm_sec = atoi(match[6].str().c_str());
}
}
else{ //Old ANSI format
if (regex_search(_date, match, regex("^\\w{3} (\\w{3})  (\\d{1,2}) (\\d{2}):(\\d{2}):(\\d{2}) (\\d{4})$"))){
int month;
for (int i = 0; i < sizeof(months); i++){
if (months[i] == match[1].str()){
month = i;
break;
}
}
date.tm_mday = atoi(match[2].str().c_str());
date.tm_hour = atoi(match[3].str().c_str());
date.tm_min = atoi(match[4].str().c_str());
date.tm_sec = atoi(match[5].str().c_str());
date.tm_year = atoi(match[6].str().c_str());
}
}
}
return date;
}


void HTTP::defaultConfig(){ //Set some values help to don't check state in every function
WSAStart();
state = SETUP_NEED;
code = 0;
version = 0;
content_length = 0;

}



void HTTP::WSAStart(){
if (socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) == INVALID_SOCKET && WSAGetLastError() == WSANOTINITIALISED){
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
}
}








//split string in vector

vector<string> HTTP::split(string full, string part){
vector<string> parts;
int last = 0;
int p;
while ((p = full.find(part, last)) != -1){
parts.push_back(full.substr(last, p - last));
last = p + part.size();
}
parts.push_back(full.substr(last, full.size()));
return parts;
}



http_config.hpp
Código (cpp) [Seleccionar]
#ifndef HTTP_CONFIG_HPP
#define HTTP_CONFIG_HPP

#include <string>
#include <vector>
using namespace std;

class HTTP_config{
public:
HTTP_config();
HTTP_config(string get);
HTTP_config(string get, vector < vector <string > >);
bool add(string name, string value);
bool remove(string name);
bool edit(string name, string value);
const int size();
void setGet(string);
string getGet();

vector<string> operator [](const int);
private:
vector < vector<string> > data;
string get;
};



#endif


http_config.cpp
Código (cpp) [Seleccionar]
#include "http_config.hpp"

HTTP_config::HTTP_config(){}
HTTP_config::HTTP_config(string _get){
get = _get;
}
HTTP_config::HTTP_config(string _get, vector < vector<string> > _data){
get = _get;
data = _data;
}



bool HTTP_config::add(string name, string value){
for (int i = 0; i < data.size(); i++){
if (data[i][0] == name)
return false;
}
vector < string > a = {
name, value
};
data.push_back(a);
return true;
}
bool HTTP_config::remove(string name){
for (int i = 0; i < data.size(); i++){
if (data[i][0] == name){
data.erase(data.begin() + i);
return true;
}
}
return false;
}
bool HTTP_config::edit(string name, string value){
for (int i = 0; i < data.size(); i++){
if (data[i][0] == name){
data[i][1] = value;
return true;
}
}
return false;
}

vector<string> HTTP_config::operator[](const int i){
if (i < data.size()){
return data[i];
}
else{
return vector<string>();
}
}


const int HTTP_config::size(){
return data.size();
}

string HTTP_config::getGet(){
return get;
}



main.cpp (Ejemplo)
Código (cpp) [Seleccionar]
#include <iostream>
#include <WinSock2.h>
#include <string>
#include <vector>
#include <regex>
#include "http_class.hpp"

using namespace std;

#pragma comment(lib,"ws2_32.lib")

int main(){
HTTP http;
http.setUrl("http://foro.elhacker.net/programacion_cc/mi_clase_http_winsock_peticion_http_ejemplo-t427014.0.html");
http.get();
cout << http.Code() << endl << endl;


HTTP http2("http://www.cplusplus.com/reference/");
cout << http2.getHost() <<  ": HTTP/" << http2.HTTPVersion() << endl << endl;

HTTP_config config("GET / HTTP/1.0", {
{ "Host", "www.google.es" },
{ "Accept-Encoding", "gzip, deflate, sdch" },
{ "Accept-Language", "es,en;q=0.8" }
});
HTTP http3("www.google.es", config);
cout << http3.Header();
getchar();
fflush(stdin);

HTTP http4("www.google.es", "", 21);
if (http4.State() == CONNECTION_TIME_OUT){
cout << "No answer from " << http4.getHost();
}
getchar();
return 0;
}


Descarga: http://pruebasdephp.hol.es/things/HTTP_class%20V2.0.rar


Cambie solo los class state por enums porque los otros eran muchos y no me apetece estar escribiendo uno a uno y mirar todos los números otra vez.


Algún fallo o recomendación ? Esta bien hecha?