elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER  (Leído 517 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
[Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
« en: 17 Octubre 2019, 18:09 »

Un archivo .asi es una .dll solo con la extensión cambiada.

el Juego GTA San Andrea tiene un complemento llamado ASILOADER que basicamente lee todos los archivos .asi en el directorio del juego y los injecta o algo asi. (recordando q un .asi es un .dll)

los ejemplos de como crear un .asi para GTA SA estan en C++ estoy intentando pasarlo a vb.net pero no se si se podra. .-.

Siguiendo este tutorial uno puede crear fácilmente un .asi para el juego : [ C++ ] Создание мода для GTA SA

codigo c++ =

Código
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <Windows.h>
  3. #include <stdio.h>
  4.  
  5. void Debug(char* text);
  6. BOOL WINAPI DllMain(HINSTANCE dllHistance, DWORD callReason, void* reserved)
  7. {
  8.        switch (callReason)
  9.        {
  10.                case DLL_PROCESS_ATTACH:
  11.                {
  12.                        Debug("Loading");
  13.                        break;
  14.                }
  15.                case DLL_PROCESS_DETACH:
  16.                {
  17.                        break;
  18.                }
  19.                default:
  20.                {
  21.                        break;
  22.                }
  23.        }
  24.        return TRUE;
  25. }
  26. void Debug(char* text)
  27. {
  28.        FILE* fichier = fopen("debug.txt", "a");
  29.        if (fichier == 0) fichier = fopen("debug.txt", "w");
  30.        fwrite(text, strlen(text), 1, fichier);
  31.        fputs("\r\n", fichier);
  32.  
  33.        fclose(fichier);
  34. }
  35.  

Lo que he intentado :

Código
  1. Public Const DLL_PROCESS_ATTACH = 1
  2.  
  3.        Public Const DLL_PROCESS_DETACH = 0
  4.  
  5.        Public Function DllMain(ByVal dllHistance As IntPtr, ByVal callReason As Integer, ByVal reserved As Object) As Boolean
  6.            Select Case callReason
  7.                Case DLL_PROCESS_ATTACH
  8.                    Debug("Loading")
  9.                    Return True
  10.                Case DLL_PROCESS_DETACH
  11.                    Return False
  12.            End Select
  13.            Return False
  14.        End Function
  15.  
  16.        Public Sub Debug(ByVal texto As String)
  17.            System.IO.File.WriteAllText("debug.txt", texto)
  18.        End Sub

Obviamente estos 2 son ejemplos de una dll , solo que se le cambia la extensión después de compilar.



Entonces , por que no me funciona mi código en vb.net y si el de c++? / que estoy haciendo mal? / Tiene algo que ver con el punto de entrada a la dll en vb que no esta siendo llamada?

Gracias de antemano...





En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
« Respuesta #1 en: 17 Octubre 2019, 19:24 »

Ese programa al parecer trabaja con librerías nativas (código nativo), no con ensamblados .NET (código IL)...

Un ensamblado es una unidad lógica de funcionalidad que se ejecuta bajo el control de .NET common language runtime (CLR). Un ensamblado existe físicamente como un archivo .dll o como un archivo .exe. Sin embargo, internamente un ensamblado es muy diferente desde un archivo DLL Win32 de Microsoft.

En resumen, para compilar ese tipo de archivo dll deberías usar C++ como en el ejemplo que encontraste. En VB.NET es imposible, aunque cabe mencionar que en Visual C++ puedes compilar una DLL "mixta"...


pero eso seguiría siendo practicamente una dll con instrucciones IL, así que no creo que ese programa lo pueda cargar... pero bueno, lo cierto es que nunca lo he intentado ni tampoco he analizado el interior de este tipo de dll de código "mixto" para saber cuan compatible es nativamente hablando.

Saludos.


« Última modificación: 17 Octubre 2019, 19:35 por Eleкtro » En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Re: [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
« Respuesta #2 en: 17 Octubre 2019, 19:41 »

Y Seria posible crear en c++ un .ASI que llame a una funcion dll (vb.net) ?

haria algo asi como un puente:

ASILOADER ------- .ASI FILE (C++) --------------- .DLL (VB) ..

Pero en c++ se pueden hacer llamados a una dll creada en vb?
« Última modificación: 17 Octubre 2019, 19:43 por **Aincrad** » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
« Respuesta #3 en: 17 Octubre 2019, 20:33 »

en c++ se pueden hacer llamados a una dll creada en vb?

Tiene que ser una dll NATIVA, con las funciones que quieras utilizar, exportadas.

Si te empeñas en hacerlo utilizando VB.NET, (para esto he tenido que investigar) en teoría con .NET Core / CoreRT puedes compilar una dll nativa y crear los exports (funciones exportadas) muy facilmente mediante la clase de atributo 'NativeCallable', aquí tienes un ejemplo y creo que lo necesario para documentarte y practicar:



Para instalar los runtimes de .NET Core junto a las plantillas de proyecto (para el desarrollo de una dll) y demás, puedes hacerlo desde el instalador de Visual Studio.

PD: El ejemplo de arriba es para C#, pero .NET Core soporta VB.NET también...
.NET Core is the new cross-platform and open-source .NET framework to develop applications for all major operating system including Mac, Linux, and Windows. .NET Core supports UWP and ASP.NET Core only. ASP.NET Core is used to build browser-based web applications and currently, it does not support a desktop application with the user interface. Programmers can develop applications and libraries in C#, VB.NET, and F# in both runtimes.
« Última modificación: 17 Octubre 2019, 22:22 por Eleкtro » En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Re: [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
« Respuesta #4 en: 17 Octubre 2019, 21:46 »

Gracias por la informacion. vere como le hago.



Como le hago? :V



Código:
Type 'NativeCallable' is not defined.

System.Runtime.InteropServices no contiene el metodo NativeCallable. o es la version de Framework que estoy usando q no tiene ese método?



« Última modificación: 17 Octubre 2019, 21:49 por **Aincrad** » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER
« Respuesta #5 en: 17 Octubre 2019, 22:19 »

Lee detenidamente la documentación del enlace de GitHub que he compartido:

Exporting methods

For a C# method in the native library to be consumable by external programs, it has to be explicitly exported using the [NativeCallable] attribute. First define the System.Runtime.InteropServices.NativeCallableAttribute in your project, see here. The local definition of the NativeCallableAttribute is a temporary workaround that will go away once the attribute is added to the official .NET Core public surface.

Next, apply the attribute to the method

Es decir, tu tienes que definir la clase 'NativeCallableAttribute', de la misma manera en como está definida aquí:
Cita de: Elektro

Y por último, simplemente aplicas dicho atributo al método que quieras exportar, especificando el nombre del punto de entrada, es decir, lo que ya has mostrado en esa imagen.

Recuerda que puedes descargar el ejemplo oficial en C# desde GitHub para analizarlo y/o convertir el código a VB.NET:

EDITO: ahora que me doy cuenta, si el espacio de nombres donde definir la clase NativeCallableattribute debe ser estrictamente System.Runtime.InteropServices para que funcione de forma correcta, entonces en VB.NET podrías tener problemas, ya que a diferencia de C#, los miembros añadidos se representarían en un espacio de nombres local, diferente a Global.System.Runtime.InteropServices pero con el mismo nombre. Así que al final quizás VB.NET no te sirva para hacer eso, aunque no estoy seguro, solo es una suposición, pero de todas formas si tienes problemas siempre puedes hacerlo en C#.

Saludos.
« Última modificación: 17 Octubre 2019, 22:35 por Eleкtro » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Crear Archivo Excel de Solo lectura !
Programación Visual Basic
sebah97 1 3,712 Último mensaje 29 Mayo 2010, 21:57
por seba123neo
Ayuda al crear archivo en servidor!
PHP
NeoB 7 1,780 Último mensaje 4 Marzo 2012, 16:54
por NeoB
ayuda urgente crear un archivo bash script
Hacking Básico
ragnarok123456 1 1,819 Último mensaje 23 Febrero 2013, 14:57
por Nec10
Ayuda crear varios archivo bat a partir de un solo bat
Scripting
ADV 2 1,071 Último mensaje 5 Marzo 2017, 22:14
por ADV
Ayuda, error al crear un archivo con java
Java
JenselG 2 1,800 Último mensaje 27 Diciembre 2017, 12:58
por JenselG
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines