La Web del Programador: Comunidad de Programadores
 
    Pregunta:  43934 - FICHEROS .H EN C#
Autor:  Orlando Jimenez Alcazar
quisiera saber como es posible incluir o utilizar los ficheros .h (header) de visual c en aplicaciones de c#.

muchas gracias por su ayuda

  Respuesta:  Fernando Gómez
Evidentemente lo que planteas es imposible. En efecto, aunque similares, en el fondo son lenguajes muy diferentes. No puedes mezclar C# con C/C++. El concepto de archivos de encabezado no existe en C# simplemente porque no es necesario. Antes, en los albores de C, allá cuando R&K escribían las recomendaciones del lenguaje C en los setentas, los archivos de código *.c eran tratados como módulos, y su organización era fundamental. Por ejemplo, la palabra "static" hacía que una variable o función fuese local al módulo *.c que la invocaba.

Con el paso del tiempo, los prototipos de funciones y definiciones de símbolos se iban escribiendo en cada módulo. Así, para evitar la reescritura de estos, se ideo el "preprocesador" junto con la directiva #include. Esta directiva lo único que hace es copiar el .h fuente e incrustarlo en tu .c. Por ejemplo, si tenemos:

/* Archivo PROG.H */
#define STR_SIZE 128
void Funcion1(int, char*);
void Funcion2();
void Funcion3(...);

y si tenemos:

/* Archivo PROG.C */
#include "PROG.H"

int main()
{
Funcion2();
}

void Funcion2()
{
}

En realidad, el preprocesador substituiría la llamada #include por el archivo PROG.H:

/* Archivo PROG.C */

/* Archivo PROG.H */
#define STR_SIZE 128
void Funcion1(int, char*);
void Funcion2();
void Funcion3(...);

int main()
{
Funcion2();
}

void Funcion2()
{
}

En C# el módulo se considera al objeto mismo, toda vez que al no haber funciones ni símbolos sueltos -todo está dentro de una clase- no hay necesidad de tal distinción. Así, al considerarse a la clase como módulo, no es necesario siquiera saber que existe la clase, ya que se busca por módulo. Por ello es que no están permitidos los archivos de cabecera en C#.

Saludos.