Я пытаюсь загрузить DLL LoadLibrary
способом.Вот файл .h
моей DLL:
#ifdef CALLBACKTESTDLL_EXPORTS
#define CALLBACKTESTDLL_API __declspec(dllexport)
#else
#define CALLBACKTESTDLL_API __declspec(dllimport)
#endif
typedef int(CALLBACK *p)(char*);
extern "C" __declspec(dllexport) int __stdcall StrToInt(char* InputString);
extern "C" __declspec(dllexport) char* __stdcall NumCompare(p FuncP, char* InputString, int b);
В нем есть две функции.StrToInt
преобразовать ввод char*
в int
.Другой - NumCompare
, где вызывается StrToInt
, и его возвращаемое значение сравнивается с другим входным значением int
, а затем NumCompare
возвращает результат сравнения.Эти две функции экспортируются в DLL с именем callbacktestDLL.dll
.
Теперь я хочу назвать эту DLL LoadLibrary
способом.(Способ pragma comment(lib,"callbacktestDLL")
уже успешно протестирован, поэтому я хочу протестировать другой способ).
Для вызова функций DLL это то, что я делаю в CallDLL.cpp
:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
typedef int (*P_to_Func1)(char*); //pointer for StrToInt
typedef char* (*P_to_Func2)(P_to_Func1, char*, int); //pointer for NumCompare
int main()
{
//load DLL:
HINSTANCE LDLL = LoadLibrary("callbacktestDLL.dll");
if (LDLL == NULL)
{
printf("DLL loading failed");
FreeLibrary(LDLL);
}
else
{
P_to_Func1 p1 = (P_to_Func1)GetProcAddress(LDLL, "_StrToInt@4");
if (p1 = NULL)
{
printf("StrToInt loading failed");
};
P_to_Func2 p2 = (P_to_Func2)GetProcAddress(LDLL, "_NumCompare@12");
if (p2 = NULL)
{
printf("NumCompare loading failed");
};
//Call StrToInt:
std::cout << p1("1234") << std::endl;
//call NumCompare:
p2(p1, "1234", 20);
//release:
FreeLibrary(LDLL);
};
return 0;
}
Это имена функций, показанные в зависимости от:
Когда я генерирую проект CallDLL
, ошибка не возникает и генерируется успешно.Однако, когда я запускаю проект, выскакивает диалоговое окно с сообщением CallDLL.exe has stopped
, а в окне cmd
- «нажмите любую клавишу для продолжения».Может ли кто-нибудь быть так любезен, чтобы помочь мне понять и решить эту проблему?