2017-04-20 2 views
0

Je suis sur le point de développer une API qui devrait être distribuée avec une DLL. Comme je ne peux pas tester directement mon code écrit dans la DLL, je dois charger la DLL dans un test-projet et l'exécuter ici.C++ Chargement d'une DLL

J'utilise Visual Studios 2015. J'ai fait un TestProject et dans cela, je fait mon projet pour la DLL:

Solution-Tree "TestProject"

  • DLLProject

  • TestProject

exporter une fonction factice pour tester si je suis capable de charger la DLL:

#ifndef EXPORT 
#define EXPORT __declspec(dllexport) 
#endif 

extern "C" { 
    EXPORT int dummy() { 
     return 5; 
    } 
} 

Puis, dans mon TestProject, je tente de charger la DLL, extraire la fonction et l'exécuter:

#include <windows.h> 
#include <iostream> 
using namespace std; 

typedef int (__stdcall *dll_func)(); 

int main() { 
    HINSTANCE hGetProcIDDLL = LoadLibrary(TEXT("H:\\path\\to\\project\\Debug\\DLLProject\\DLLProject.dll")); 

    if (hGetProcIDDLL == NULL) { 
     cout << "DLL could not be loaded. " << GetLastError() << endl; 
     return; 
    } 

    dll_func f = (dll_func)GetProcAddress(hGetProcIDDLL, "create"); 

    if (f == NULL) { 
     cout << "Factory function could not be resolved. " << GetLastError() << endl; 
     return; 
    } 

    cout << "Factory function returns: " << f() << endl; 
} 

je copiais presque tout de this question. Malheureusement, quand je lance mon TestProject, mes impressions sur la console: « DLL ne pouvait pas être chargée 4250. »

A ce stade, je ne sais vraiment pas quoi faire parce que l'erreur comme décrit here dit basiquement rien. Avec un peu de recherche, je ne pouvais pas obtenir de réponses ... espère que vous pouvez me aider: D

+0

Grab [procmon] (https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx), définissez le filtre à votre test exe et voir ce que les opérations échouent fichier. – GSerg

+0

Peut-être que je dois ajouter que le TestProject est un "Visual C++/CLR/CLR-Consoleprogramm" -Projet et le DLLProject est un "Visual C++/Windows/DLL (Windows Universal)" - Projet: D – Rockettomatoo

+0

@GSerg tous vos processus moniteur me donne, est un "processus de création". Rien à voir de ma DLL – Rockettomatoo

Répondre

-1

Cela est probablement dû à des paramètres de liaison. Assurez-vous de spécifier "/ APPCONTAINER: NO" dans les paramètres de l'éditeur de liens.

+0

comme écrit dans ma question: J'utilise Visual Studios 2015. Où puis-je le spécifier? : D – Rockettomatoo

+0

Je n'ai pas VS15 sur cet ordinateur, donc je ne peux pas vérifier, mais dans les paramètres de l'éditeur de liens, il dit quelque part la ligne de commande. vous pouvez facilement google cette partie –