Ejemplo de VC llamando a DLL, escrito en Easy Language
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.