Red de conocimiento informático - Problemas con los teléfonos móviles - Ejemplo de VC llamando a DLL, escrito en Easy Language

Ejemplo de VC llamando a DLL, escrito en Easy Language

Hoy intenté usar VC++ para llamar a la DLL de Yi Language. El lenguaje Yi tiene muchas buenas bibliotecas de funciones de alto nivel y el proceso de escritura de DLL es muy simple. Todas las funciones complejas en C++ se pueden implementar fácilmente en el lenguaje Yi, por lo que consideramos convertir la DLL en VC++ a través del lenguaje Yi.

Todas las funciones DLL de Easy Language siguen la convención stdcall y no generarán un archivo lib para que usted lo llame.

De esta manera, existen dos formas de llamar a nuestra dll sencilla:

Llamada dinámica _stdcall en 1.vc.

2. Cree un archivo lib usted mismo y luego llámelo estáticamente.

Ambos métodos tienen sus pros y sus contras. Si hay muchas funciones en la DLL, llevará algún tiempo crear la biblioteca lib, pero se hará de una vez por todas.

La llamada dinámica de DLL requiere llamar a las funciones API LoadLibrary y GetProcAddress. LoadLibrary carga el archivo DLL que se va a llamar, luego usa GetProcAddress para obtener un puntero a una función en la DLL y luego lo llama a través del puntero de función.

El siguiente es un ejemplo de cómo crear una DLL de Easy Language y llamarla dinámicamente en VC.

1. Primero cree una DLL de lenguaje fácil.

Abra el idioma Yi y seleccione "Biblioteca de vínculos dinámicos de Windows" en el asistente emergente.

Ahora añadimos nuestra propia función. Ctrl+N agrega la siguiente función

Versión 2

. Subrutina myadd, tipo decimal de doble precisión, abierta

Parámetro a, tipo decimal de doble precisión

Parámetro b, tipo decimal de doble precisión

Retorno (a+ b)

La función myadd se utiliza para calcular la suma de dos decimales de doble precisión (tipo doble C++).

No olvides que esta función debe ser pública para que se pueda exportar.

Una vez completado, se compila en un archivo dll y se denomina mydll.dll.

De esta forma se completa una DLL de lenguaje sencillo y fácil.

2. Llame a la DLL de Easy Language en VC.

Para llamar dinámicamente a la DLL, necesita utilizar las funciones API LoadLibrary y GetProcAddress. Consulte MSDN y sabrá que el uso de estas dos funciones requiere una adición.

# include & ltWindows.h & gt

A continuación, debemos declarar un tipo de función _stdcall en la función llamada.

typedef double(CALLBACK * dll _ myadd) (double, double);

(Nota: CALLBACK y WINAPI son alias de __stdcall, definidos en windef.h:

#Utilice para definir la devolución de llamada __stdcall //Función de devolución de llamada

#Defina WINAPI __stdcall //WINAPI

Utilice la que desee, o puede escribir __stdcall directamente.

Con el tipo de función, puede usarlo para definir variables de puntero de función y luego llamar a la función.

HINSTANCE hDll//controlador dll

dll _ myadd myadd//Variable de puntero de función

hDll = LoadLibrary(" mydll . dll "); dll

myadd =(dll_myadd)GetProcAddress(hDll, "myadd"); //Obtiene la dirección del puntero de la función myadd en dll.

Double s = myadd(1.2, 2.3); //Llama a la función aquí

No olvides llamarla después de usar la DLL.

Biblioteca gratuita (hDll); //Liberar identificador de DLL

De esta manera, se completa el ejemplo de simplemente llamar a Yiyu DLL.

Cabe señalar que:

Al declarar un tipo de función, se debe especificar que es una llamada estándar y no se puede omitir. Porque el método de llamada predeterminado de VC es cdecl.

Si desea omitirlo, puede cambiar las propiedades del proyecto y elegir usar stdcall en la página de propiedades-pestaña C++-Convención de llamadas avanzadas. Esto también puede omitir la declaración stdcall.