Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
¿Cómo hacer que este código sea seguro al acceder a DLL?

Para devolver matrices en C se necesitan punteros. Para aclarar mi pregunta, creé una función .c simple y la compilé como DLL y accedí a ella mediante C#. La función C es:

 #include <stdio.h> __declspec(dllexport) int* ReturnArray(int size) { int* arr = malloc(size * sizeof(int)); arr[0] = 19; arr[1] = 18; arr[2] = 17; arr[3] = 16; arr[4] = 15; return arr; }

En el lado de C#:

 namespace ConsoleC2CSExample { class Program { [DllImport("array.dll", EntryPoint = "ReturnArray", CallingConvention = CallingConvention.Cdecl)] public unsafe static extern short* ReturnArray(int size); static unsafe void Main(string[] args) { int arraySize = 5; short *ptr = ReturnArray(arraySize); for(int i = 0; i < arraySize; i++) Console.WriteLine(*(ptr + i * sizeof(short))); Console.Read(); } } }

Y la salida es la esperada de la siguiente manera:

ingrese la descripción de la imagen aquí

Tengo dos preguntas aquí.

  1. ¿Cómo se puede hacer esto sin usar el modo no seguro?
  2. ¿Y cuáles son los peligros si alguno de uso inseguro?
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

C#/.NET se denomina código administrado porque se ejecuta de forma segura en Common Language Runtime (CLR). Mientras que el código C es el llamado código no administrado.

El CLR asegura que no sufrimos los problemas típicos conocidos del código C (como el desbordamiento del búfer, el desbordamiento del búfer, ...) que dan como resultado un código vulnerable, fallas en las aplicaciones, comportamiento desconocido, etc.

Por lo tanto, el peligro de usar código no seguro es que los errores en su biblioteca C probablemente terminarán inesperadamente con toda su aplicación C#/.NET, causándole muchos dolores de cabeza.

Para deshacerse al menos del contexto inseguro dentro de su código C#, puede probar lo siguiente:

 using System.Runtime.InteropServices; namespace ConsoleC2CSExample { class Program { [DllImport("array.dll", EntryPoint = "ReturnArray", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr ReturnArray(int size); static void Main(string[] args) { int arraySize = 5; IntPtr ptr = ReturnArray(arraySize); for(int i = 0; i < arraySize; i++) Console.WriteLine(Marshal.ReadInt32(ptr + i * sizeof(int))); Console.Read(); } } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda