Я попытался загрузить динамическую копию C++ динамически, сначала я загрузил dll с помощью функции «LoadLibrary», и он правильно обрабатывает ее. После этого я попытался получить функцию-указатель функции DLL-файла с помощью «GetProcAddress», он возвращает NULL. Пожалуйста, найдите мой код DLL и код приложения для тестирования и сообщите мне, где в коде происходит неправильное.Функция GetProcAddress, возвращающая NULL
dummy2.h
namespace newer
{
class dllclass
{
public:
static __declspec(dllexport) int run(int a,int b);
};
}
dummy2.cpp
#include <iostream>
using namespace std;
#include "dummy2.h"
namespace newer
{
int dllclass::run(int a,int b)
{
return a+b;
}
}
dummy1.cpp
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
typedef int (*Addition)(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
Addition add;
HINSTANCE hDLL;
hDLL = LoadLibrary(TEXT("Dummy2.dll"));
add = (Addition)GetProcAddress(hDLL, "run");
getchar();
return 0;
}
см выше код и наставит меня.
Вы, вероятно, нужно 'GetProcAddress (hDLL "dllclass :: Run"); 'или' GetProcAddress (hDLL, "newer :: dllclass :: run"); '? –
GetProcAddress должен знать ** точное ** имя, которое экспортируется, включая обложку и любые специальные символы, дефисы, вопросительные знаки, @ символы и т. Д. Таким образом, «Run» - это не то же самое, что «run», который не является таким же, как "запустить @ 4". Вам нужно загрузить DLL в нечто вроде Dependency Walker или другого инструмента, чтобы узнать, что такое * точное имя, и это имя, которое вы должны использовать в GetProcAddress. – PaulMcKenzie
На самом деле это нечто более похожее на «__imp_? Run @ dllclass @ newer @@ SAHHH @ Z» – axalis