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. |