Generar dll .net que se pueda consumir en VFP

A cada una de las clases que se van a exponer:

1. En tu clase C# debes incluir el namespace System.Runtime.InteropServices;

2. La clase que deseas accesar desde VFP debe estar declarada como public y
tener estas directivas:

    [ClassInterface(ClassInterfaceType.AutoDual)]

    [ProgId("className")]

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

4. Los metodos publicos de la clase no pueden tener sobrecargas, es decir, multiples versiones del mismo metodo con diferentes parametros.

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

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

Al proyecto:
7. En propiedades del proyecto sección Build marcarle Register for COM interop y el XML Tambien debes colocar ComVisible  en true en el archivo AssemblyInfo.cs

8. Una vez compilada la dll, la misma debe ser registrada de la siguiente forma antes de poder ser usada en VFP:
    Windows 32 bitsC:\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

Nota: Extraido de: http://groups.google.com/group/publicesvfoxpro/browse_thread/thread/fedc322c2f470b4f/1359817fd36233ef

Para evitar problemas de registro de la DLL (Refereidos al infierno de las DLL... "DLL HELL"), se deben firmar las librerias con nombres fuertes "STRONG NAMES". Para esto en propiedades del proyecto ir a la pestaña Signing , Habilitar la opción Sign the assembly y seleccionar o crear un archivo snk.

Compilar la libreria. Para el registro usar:

Regasm.exe /codebase [Nombre de la libreria]

Nota: Extraido de: http://www.sweetpotatosoftware.com/SPSBlog/PermaLink.aspx?guid=df3f1be8-62bc-491c-935e-570ebfe53164 
Mas sobre STRONG NAMES: http://msdn.microsoft.com/en-us/library/xwb8f617.aspx

 

Consola de depuración de Joomla!

Sesión

Información del perfil

Uso de la memoria

Consultas de la base de datos