Autor
|
Tema: Transformar Codigo Sencillo de VB6 a C++ (Leído 4,814 veces)
|
revenge1252
Desconectado
Mensajes: 70
|
Hola, como bien dice el titulo, tengo un codigo en VB6 que me funciona a la perfeccion. es este: Public Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" (ByVal dwOption As Long, ByVal pBuffer As String, ByVal dwBufferLength As Integer, ByVal dwReserved As Integer)
Public Function UChange(ByVal Variable As String) UrlMkSetSessionOption &H10000001, Variable, Len(Variable), 0 End Function me preguntaba si alguien me podria ayudar para adaptarlo a C++ 6 Necesito portar-lo y no encuentro el codigo ya hecho para C++, y tampoco se transformarlo yo mismo, seria para una DLL. Gracias por leer mi post y Saludos!
|
|
|
En línea
|
|
|
|
The Swash
Desconectado
Mensajes: 194
Programmer
|
Hola, Paso de afán a programar la función pero no tuve tiempo de probar bien. En teoría debe funcionar, me cuentas. Un saludo, Iván Portilla. #include <windows.h> HRESULT (WINAPI * UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved); DWORD UChange(PCHAR Variable) { HANDLE DLL; HRESULT Result; DWORD ResultFunc = 0; DLL = LoadLibraryA("urlmon.dll"); UrlMkSetSessionOption = GetProcAddressA(DLL, "UrlMkSetSessionOption"); if (UrlMkSetSessionOption != NULL) { Result = UrlMkSetSessionOption(0x10000001, Variable, lstrlenA(Variable), 0); if (Result == S_OK) ResultFunc = 0; else if(Result == E_INVALIDARG) ResultFunc = -1; } else ResultFunc = -1; return ResultFunc; }
|
|
|
En línea
|
|
|
|
revenge1252
Desconectado
Mensajes: 70
|
Hola, ya lo probe, no consigo hacerlo funcionar, siento mi bajo nivel, que probablemente sea la causa de que no funcione... no entiendo 100% como funciona el codigo que me has dejado. aun asi intente hacerlo funcionar, este es el codigo entero de mi proyecto: // WINUS.cpp : Defines the entry point for the application. //
#include "stdafx.h" #include <windows.h> HRESULT (WINAPI * UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved); DWORD UChange(PCHAR Variable) { HANDLE DLL; HRESULT Result; DWORD ResultFunc = 0; DLL = LoadLibraryA("urlmon.dll"); UrlMkSetSessionOption = GetProcAddressA(DLL, "UrlMkSetSessionOption"); if (UrlMkSetSessionOption != NULL) { Result = UrlMkSetSessionOption(0x10000001, Variable, lstrlenA(Variable), 0); if (Result == S_OK) ResultFunc = 0; else if(Result == E_INVALIDARG) ResultFunc = -1; } else ResultFunc = -1; return ResultFunc; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. UChange("LOL") return 0; } y me da los siguientes errores: --------------------Configuration: WINUS - Win32 Debug-------------------- Compiling... WINUS.cpp C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(16) : error C2065: 'GetProcAddressA' : undeclared identifier C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(16) : error C2440: '=' : cannot convert from 'int' to 'long (__stdcall *)(unsigned long,void *,unsigned long,unsigned long)' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(41) : error C2143: syntax error : missing ';' before '}' C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(41) : warning C4508: 'WinMain' : function should return a value; 'void' return type assumed Error executing cl.exe. WINUS.exe - 3 error(s), 1 warning(s) perdona mi ignorancia, siempre trabaje con VB6, pero para crear esta dll necesito como no c++ y me estoy informando todo lo que puedo pero sigo atascado, por cierto, gracias por responder y por hacerlo tan rapido! Saludos!
|
|
« Última modificación: 1 Junio 2012, 20:48 pm por revenge1252 »
|
En línea
|
|
|
|
The Swash
Desconectado
Mensajes: 194
Programmer
|
Hola, Creo que me equivoque en unos detalles, aquí te dejo el código que estimo te debe funcionar, pero no tengo Visual Studio, yo lo compilo con MinGW. Un saludo, Iván Portilla. #include <windows.h> typedef HRESULT (WINAPI* UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved); DWORD UChange(PCHAR Variable) { HANDLE DLL; HRESULT Result; DWORD ResultFunc = 0; UrlMkSetSessionOption _UrlMkSetSessionOption; DLL = LoadLibrary("urlmon.dll"); _UrlMkSetSessionOption = (UrlMkSetSessionOption)GetProcAddress(DLL, "UrlMkSetSessionOption"); if (_UrlMkSetSessionOption != NULL) { Result = _UrlMkSetSessionOption(0x10000001, Variable, lstrlenA(Variable), 0); if (Result == S_OK) ResultFunc = 0; else if(Result == E_INVALIDARG) ResultFunc = -1; } else ResultFunc = -1; return ResultFunc; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. UChange("LOL"); return 0; }
|
|
|
En línea
|
|
|
|
revenge1252
Desconectado
Mensajes: 70
|
Hola, antes de nada, muchisimas gracias por ayudarme, probe el codigo y se depuraron casi todos los errores menos uno, que es este:
--------------------Configuration: SDXD - Win32 Debug-------------------- Compiling... SDXD.cpp C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\SDXD\SDXD.cpp(17) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *' Conversion from 'void*' to pointer to non-'void' requires an explicit cast Error executing cl.exe.
SDXD.exe - 1 error(s), 0 warning(s)
estoy buscando una solucion, pero por ahora no encuentro nada, supongo que para ti arreglar-lo sera nada y menos, aun asi voy a seguir mirando aver, gracias y saludos!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
En lugar de: HANDLE DLL;Usa: HMODULE DLL;Usar UrlMkSetSessionOption tal cual como el typedef no funcionara en SDKs de este siglo donde la funcion existe. Tambien podrias usar enlazado estatico: #pragma comment(lib, "urlmon") #include <windows.h> void UChange(char *user_agent) { UrlMkSetSessionOption (URLMON_OPTION_USERAGENT , user_agent , strlen(user_agent ), 0);} ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
@The Swash: cuando ocupas LoadLibray debes al termino (cuando ya no uses mas la libreria) usar FreeLibrary...
Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
revenge1252
Desconectado
Mensajes: 70
|
hola de nuevo, antes de nada gracias a todos los que se estan interesando por mi post, en fin, con los varios codigos que me han ido dejando finalmente cree este code: #include "stdafx.h" #include <windows.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib, "urlmon")
HRESULT (WINAPI * UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved);
void UChange(char *user_agent) { UrlMkSetSessionOption(0x10000001, user_agent, strlen(user_agent), 0); }
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) { switch (reason) { case DLL_PROCESS_ATTACH: // AQUI UN TIMER, NO SLEEP UChange("XDD"); break; } return TRUE; } Me explico, este code lo que deberia de hacer es cambiar el user agent cuando la dll se inyecta en algun programa que tenga un Webbrowser. por algun motivo que desconozco, por ahora no funciona, tengo una posible idea de el porque, igual esque el codigo carga tan pronto que no dio tiempo a que cargaran los controles de Webbrowser etc, de modo que no hace ningun efecto el cambio de UA, otra posibilidad esque el code no este bien hecho, lo que estoy seguro de que esta bien hecho es la parte que hace que cargue al ser inyectada la dll, ya que puse un MSGBOX y lo arranco, si fuera cierto lo del tiempo, se me ocurre poner una funcion tipo Sleep para que tarde un rato en cargar, pero Sleep no serviria, ya que "paraliza" toda la carga del programa, tendria que ser algo tipo timer, aver si a alguien le interesa el tema y me hecha una mano. Saludos! PD: intente usar la funcion Uchange desde VB6, pero no funciona tampoco..., lo intente para descartar la posibilidad de que el codigo este bien o mal, pero me da este error: No se puede encontrar el punto de entrada de la DLL uchange en C:\dll.dll
|
|
« Última modificación: 3 Junio 2012, 18:23 pm por revenge1252 »
|
En línea
|
|
|
|
revenge1252
Desconectado
Mensajes: 70
|
Hola.. por ahora veo que nadie me ayuda, en fin u.u..
e avanzado un poco mas en solitario, descarto la teoria extraña de que igual no le dio tiempo a cargar a IE y por eso no funcione, el error esta en que UrlMkSetSessionOption no carga correctamente, el codigo no funciona.
ya que me deje de timers etc en la dll y directamente inyecte la dll en un proceso de Internet explorer que ya habia cargado por completo, aparecio el msgbox, y justo detras de el iva el supuesto cambio de UA, pero no lo cambio... estoy casi seguro de que es tema de declaraciones mal hechas, pero ahi si que por ahora sigo sin conseguir nada...
aver si alguien me ayuda TT saludos
|
|
« Última modificación: 6 Junio 2012, 17:50 pm por revenge1252 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
busco Un codigo muy sencillo
« 1 2 »
PHP
|
bels_mike
|
18
|
8,203
|
14 Octubre 2007, 11:19 am
por Alex_bro
|
|
|
No funciona codigo sencillo...
« 1 2 3 »
Programación Visual Basic
|
hAcKeR92
|
20
|
6,981
|
20 Febrero 2008, 02:34 am
por Chefito
|
|
|
Duda, código sencillo.
Java
|
leogtz
|
6
|
5,058
|
6 Marzo 2010, 02:01 am
por leogtz
|
|
|
Transformar codigo 6.0 a VB
.NET (C#, VB.NET, ASP)
|
migyn12
|
1
|
1,887
|
17 Mayo 2015, 21:04 pm
por Eleкtro
|
|
|
transformar un codigo C en ensamblador
ASM
|
nacho1167
|
1
|
3,186
|
10 Noviembre 2017, 09:12 am
por Eternal Idol
|
|