Crear una DLL en .NET y usarla en VFP

From codeWiki
Jump to: navigation, search

Por: VictorEspina


Alguien una vez dijo que no es cuestion de cambiarse de un lenguaje a otro sino de usar la herramienta adecuada al problema que se desea resolver. C# es excelente para muchas cosas en las que VFP no es tan bueno, por lo que el poder crear un DLL en C# y usarlo en VFP se convierte en algo muy poderoso. Aqui les dejo todo un conjunto de tips para lograr justamente esto:


  • En tu clase C# debes incluir el namespace System.Runtime.InteropServices;
  • La clase que deseas accesar desde VFP debe estar declarada como public y tener estas directivas:
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("className")]

donde "className" es el nombre OLE de la clase, es decir, el que usaras en el CREATEOBJECT en VFP.

  • Los metodos de la clase que quieras accesar desde VFP deben estar declarados como public y no ser estaticos.
  • Los metodos publicos de la clase no pueden tener sobrecargas, es decir, multiples versiones del mismo metodo con diferentes parametros.
  • Si un metodo devuelve un tipo estructurado, este tipo debe ser creado como class (no como struct) y cumplir con todas las condiciones indicadas en los puntos 1, 2, 3 y 4.
  • Si un metodo devuelve un array de cualquier tipo (ej, string[]), VFP lo recibe como un tipo ARRAY y no como un objeto (como lo es en .NET), por lo que no podremos acceder a las propiedaes del array, tal como Lenght, pero si a sus items:
aItems = myClass.MyMethod()
FOR EACH oItem IN aItems
 ?oItem.Property
ENDFOR

o

aItems = myClass.MyMethod()
FOR i = 1 TO ALEN(aItems,1)
oItem = aItems[i]
 ?oItem.Property
ENDFOR
  • Antes de compilar la clase, debes ir a las propiedades del proyecto, Application, boton Assembly Information y marcar la casilla "Make assembly COM-visible"
  • Una vez compilada la dll, la misma debe ser registrada de la siguiente forma antes de poder ser usada en VFP:

Windows 32 bits: C:\WINDOWS\microsoft.net\framework\v2.0.50727\regasm mylib.dll /register /codebase /tlb

Windows 64 bits: C:\WINDOWS\microsoft.net\framework64\v2.0.50727\regasm mylib.dll /register /codebase /tlb

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox