J'ai créé une DLL avec une fonction nommée "render()" et je veux la charger dynamiquement dans mon application, mais GetProcAddress ne la trouve pas. Voici la .h DLL:GetProcAddress ne trouve pas mes fonctions
#ifdef D3D_API_EXPORTS
#define D3D_API_API __declspec(dllexport)
#else
#define D3D_API_API __declspec(dllimport)
#endif
D3D_API_API void render();
Et voici DLL Cpp:
#include "stdafx.h"
#include "D3D_API.h"
#include <iostream>
D3D_API_API void render()
{
std::cout << "method called." << std::endl;
}
Voici l'application qui tente d'utiliser cette fonction:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE myDLL = LoadLibrary(L"D3D_API.dll");
if (myDLL == NULL) {
std::cerr << "Loading of D3D_API.dll failed!" << std::endl;
}
typedef void (WINAPI *render_t)();
render_t render = (render_t)GetProcAddress(myDLL, "render");
if (render == NULL) {
std::cerr << "render() not found in .dll!" << std::endl;
}
return 0;
}
Mon but est de faire une 3D moteur qui prend en charge à la fois D3D et OpenGL via leurs propres .DLL en utilisant une API unifiée. J'ai regardé le .dll dans le bloc-notes et il y avait une chaîne "render".
Merci, ça l'a corrigé! – SurvivalMachine
J'ai essayé d'utiliser le nom décoré dans le code d'importation, c'est 'GetProcAddress (myDLL," 0MyObject @ my_name_space @@ QAE @ XZ ");' et la valeur de retour est 'NULL'. Êtes-vous sûr que cela devrait fonctionner? – Benny
Pour ajouter à cela, en utilisant 'extern' C "'supprimera tout changement de nom C++, mais laissera quand même le nom C mangling. Afin d'exporter les noms simples, vous devriez regarder en utilisant un fichier .DEF. Voir https://blogs.msdn.microsoft.com/oldnewthing/20120525-00/?p=7533 – njplumridge