carga de la biblioteca dinámica de c ++

Reimpreso: https://blog.csdn.net/ztq_12345/article/details/99677769

 

Use ide is vs, use tres funciones en Windows.h para cargar la
primera biblioteca dinámica : HMODULE LoadLibrary (LibFileName: PChar) // Obtener el
parámetro del controlador dll es la ruta que necesita cargar el dll, el valor de retorno dll maneja en
segundo lugar : FARPROC GetProcAddress (HMODULE hModule, LPCSTR lpProcName) // Obtenga la dirección de la función
. El primer parámetro es el identificador de la dll, y el segundo es el nombre de la función en la dll que llama. Dirección de función de llamada de valor de retorno
tercero: FreeLibrary (HMODULE hModule) // liberar el
parámetro dll es el identificador que necesita liberar el dll para
cargar la biblioteca dinámica Debe incluir 2 archivos El primero es la biblioteca de enlace dinámico. El archivo dll El segundo es la biblioteca estática Lib
las que cabe destacar es que se necesita para ser llamado delante de la función en la DLL debe agregarse __declspec (dllexport) sólo se pueden añadir después de la llamada externa
__declspec (dllexport) char * creat ( )
y después de esto el compilador se quejará o 127 este Debido a que C ++ admite sobrecarga, la forma de la función se agrega después de la función al compilar, y el lenguaje es inconsistente, por lo que al llamar al dll, no se encontrará la función llamada. Sólo tiene que añadir extern "C" indica al compilador que el compilador uso c puede ejecutar esta parte del éxito,
extern __declspec (dllexport) char "C" * creat ()
el código específico de la siguiente
# include <iostream>
#include <la Windows.h>
// Cargar lib
#pragma comment (lib, "C: \\ Users \\ ztq \\ Desktop \\ vs \\ plugin_dll \\ Debug \\ C: \\ Users \\ ztq \\ Desktop \\ vs \\ plugin_dll \\ Debug \ \ .lib ")
int main ()
{
 HMODULE hDLL;
 *** // Aquí se obtiene el controlador dll ***
 hDLL = LoadLibrary (" C: \\ Users \\ ztq \\ Desktop \\ vs \\ plugin_dll \\ Debug \\ plugin_dll.dll ");
 if (hDLL)
 {
    *** // Aquí está el puntero de definición. int es el tipo devuelto por su función de llamada *** FUNCTION es un nombre, el paréntesis detrás de él es el parámetro de su función de llamada, uso múltiple, separado por números
     // Llamo a la función en dll, ningún parámetro está vacío,
  typedef char * ( WINAPI * FUNCTION) ();  
  
  *** // Aquí está la dirección para llamar a la función dll ***
  FUNCTION fun = (FUNCTION) GetProcAddress (hDLL, "creat");   
  
  if (fun)
  { 
  *** // Aquí está Llamar a la función en el dll *** La función devuelve "prueba".

   std :: cout << fun () << std :: endl;
  }
  else
  {
  *** // Si se llama al error, imprima el mensaje de error ***
   std :: cout << GetLastError () << std :: endl;
  }
 }
 *** // Release dll ***
 FreeLibrary (hDLL);
 sistema ("pausa");
 retorno 0;
}
————————————————
Aviso de copyright: Este artículo es CSDN El artículo original del blogger "ztq_12345" sigue el acuerdo de copyright CC 4.0 BY-SA. Para la reimpresión, adjunte el enlace original y esta declaración.
Enlace original: https://blog.csdn.net/ztq_12345/article/details/99677769

Supongo que te gusta

Origin www.cnblogs.com/MCSFX/p/12695383.html
Recomendado
Clasificación