Quote (AjaxVS @ Aug 16 2016 02:18am)
всё прокатит. с аргументами. с возвращаемыми значениями, если нужно. даже если либа или функция по какой-то причине не будет найдена, простая проверка результатов LoadLibrary() и GetProcAddress() позволит избежать error-ов. и разумеется, никаких memory leak-ов.
короче, rtfm:
http://citforum.ck.ua/book/cook/dll0.shtmlэто же основы основ :)
Про GetProcAddress я ничего и не говорю, проверка на ошибку само собой разумеется.
Я говорю про прототип функции.
Либо так: __declspec(dllexport) void Demo(char *str)
Либо так: DllFunc=(void (*) (char *str)) GetProcAddress(h,"Demo");
А у нас, как было выше сказано - нет никаких подключаемых заголовков. Dllки - не дают прототипы!
Можно извлечь через name mangling (иль как там, я забыл, в общем если правильно DLL'ка сделана) имена функций, но не прототип.
А раз у нас нет заголовка (headers), то без DynCall, т.е. работы со стеком не обойтись (как это в DynCALL реализованно я без понятия, предположительно что тупо type_id вводится в кучу\стек, и уже только через эту тему вызывается функция).
Есть конешно такая тема:
Quote
template<typename... Args>
int Fcall( void * fun, Args ... args)
{
using Ftype = int( _stdcall *)( Args... ); // выведем тип функции по ее аргументам
return ( (Ftype)fun ) ( args... );
}
...
ret = Fcall(fPtr, (HWND)NULL, "Hello World", "Tmsg", (UINT)NULL );
Только эта тема в Run-Time не пашет, а тут у нас именно Run-Time.