Existe-t-il un meilleur moyen de charger une DLL en C ++?

Maintenant je ne quelque chose comme cela et il semble désordonné, si je finis à avoir beaucoup de fonctions que je veux la référence dans ma DLL. Est-il mieux et plus propre façon d'accéder à des fonctions sans avoir à créer un typedef pour chaque définition de la fonction, de sorte qu'il sera de compiler et charger la fonction correctement. Je veux dire les définitions de fonctions sont déjà dans le .h de fichier et je ne devrais pas avoir à redeclare après je charge la fonction (ou dois-je?) Est-il une meilleure solution que d'utiliser LoadLibary? Je n'ai pas forcément besoin de cette fonction si il ya une manière que je peux faire la même chose au sein de Visual Studio 2005 paramètres du projet.


BHannan_Test_Class.h

#include "stdafx.h"
#include <windows.h>

#ifndef BHANNAN_TEST_CLASS_H_
#define BHANNAN_TEST_CLASS_H_

extern "C" {

    //Returns n! (the factorial of n).  For negative n, n! is defined to be 1.
    int __declspec (dllexport) Factorial(int n);

    //Returns true iff n is a prime number.
    bool __declspec (dllexport) IsPrime(int n);

}

#endif  //BHANNAN_TEST_CLASS_H_

BHannan_Test_Class.cpp

#include "stdafx.h"
#include "BHannan_Test_Class.h"

//Returns n! (the factorial of n).  For negative n, n! is defined to be 1.
int Factorial(int n) {
  int result = 1;
  for (int i = 1; i <= n; i++) {
    result *= i;
  }

  return result;
}

//Returns true iff n is a prime number.
bool IsPrime(int n) {
  //Trivial case 1: small numbers
  if (n <= 1) return false;

  //Trivial case 2: even numbers
  if (n % 2 == 0) return n == 2;

  //Now, we have that n is odd and n >= 3.

  //Try to divide n by every odd number i, starting from 3
  for (int i = 3; ; i += 2) {
    //We only have to try i up to the squre root of n
    if (i > n/i) break;

    //Now, we have i <= n/i < n.
    //If n is divisible by i, n is not prime.
    if (n % i == 0) return false;
  }

  //n has no integer factor in the range (1, n), and thus is prime.
  return true;
}

dll_test.cpp

#include <BHannan_Test_Class.h>

typedef int (*FactorialPtr) (int);
FactorialPtr myFactorial=NULL;

//Tests factorial of negative numbers.
TEST(FactorialTest, Negative) {

    HMODULE myDLL = LoadLibrary("BHannan_Sample_DLL.dll");

    if(myDLL) {
        myFactorial = (FactorialPtr) GetProcAddress(myDLL,"Factorial");

        if(myFactorial)
        {
            EXPECT_EQ(1, myFactorial(-5));
            EXPECT_EQ(1, myFactorial(-1));
            EXPECT_TRUE(myFactorial(-10) > 0);
        }

        FreeLibrary(myDLL);
    }

}

source d'informationauteur Brian T Hannan