Я пытаюсь динамически загрузить dll
и вызвать функцию из него во время выполнения. Мне удалось получить рабочий указатель с GetProcAddress
, но программа падает, если функция из dll
использует stdlib
. Вот код из исполняемого файла, который загружает dll
:
#include <iostream>
#include <windows.h>
typedef int (*myFunc_t)(int);
int main(void) {
using namespace std;
HINSTANCE dll = LoadLibrary("demo.dll");
if (!dll) {
cerr << "Could not load dll 'demo.dll'" << endl;
return 1;
}
myFunc_t myFunc = (myFunc_t) GetProcAddress(dll, "myFunc");
if (!myFunc) {
FreeLibrary(dll);
cerr << "Could not find function 'myFunc'" << endl;
return 1;
}
cout << "Successfully loaded myFunc!" << endl;
cout << myFunc(3) << endl;
cout << myFunc(7) << endl;
cout << myFunc(42) << endl;
cout << "Successfully called myFunc!" << endl;
FreeLibrary(dll);
return 0;
}
Вот код для dll
, который действительно работает:
#include <iostream>
extern "C" {
__declspec(dllexport) int myFunc(int demo) {
//std::cout << "myFunc(" << demo << ")" << std::endl;
return demo * demo;
}
}
int main(void) {
return 0;
}
(Обратите внимание, что метод main
в коде dll
предназначен только для успокоения компилятора)
Однако, если я раскомментирую строку с std::cout
, программа вылетает после строки cout << "Sucessfully loaded myFunc!" << endl;
, но до того, как что-либо еще будет напечатано. Я знаю, что должен быть какой-то способ делать то, что я хочу; что мне нужно изменить, чтобы он работал?