Тема: AHK: запуск консольного приложения
Добрый день! Вопрос такой: "В общем, создал я незамысловатую DLL.
#include <Windows.h>
#include <iostream>
using namespace std;
// Главная функция
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" __declspec(dllexport) void summa(void)
{
float summ = 0;
cout << "Vvedite summu: ";
cin >> summ;
if (summ <= 1000)
{
cout << "Summa = " << summ << endl;
}
else if (summ > 1500)
{
cout << "Summa = " << (summ * 0.93) << endl;
}
else
{
cout << "Summa = " << (summ * 0.97) << endl;
}
}
Вызываю через LoadLibrary, понятно, как.
#include <Windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
int main()
{
// Дескриптор DLL-библиотеки
HMODULE hDll;
// Указатель на функцию
void (*dllsumma) (void);
// Загружаем динамически подключаемую библиотеку
hDll = LoadLibrary(_T("Dll.dll"));
if(!hDll)
{
cout << _T("Динамическая библиотека не загружена") << endl;
return GetLastError();
}
// Настраиваем адрес функции
dllsumma = (void (*)(void))GetProcAddress(hDll, "summa");
if(!dllsumma)
{
cout << _T("Ошибка получения адреса функции") << endl;
return GetLastError();
}
// Вызываем функцию из библиотеки
dllsumma();
// Отключаем библиотеку
if(!FreeLibrary(hDll))
{
cout << _T("Ошибка выгрузки библиотеки из памяти") << endl;
return GetLastError();
}
// Устанавливаем паузу перед завершением программы
system("pause");
return 0;
}
Все работает. Но, вызываю на ahk:
hModule := DllCall("LoadLibrary", "Str", "DLL.dll")
testfunc := DllCall("GetProcAddress", "ptr", hModule, "Astr", "summa")
DllCall(testfunc)
И, понятное дело, не работает.
Вопрос такой:
"Как вызвать консольную программу из DLL".
Заранее спасибо!