Форум программистов, компьютерный форум CyberForum.ru

Реализовать систему плагинов (модулей), каждый из которых должен работать в отдельном потоке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сформировать матрицу NхN, элементы ниже побочной диагонали которой являются отрицательными числами http://www.cyberforum.ru/cpp-beginners/thread1118620.html
Помогите пожалуйста! Нужно сформировать матрицу NхN, элементы ниже побочной диагонали которой являются отрицательными числами.
C++ Посчитать в массиве все элементы, которые находится на нечётных позициях Одномерный массив посчитать в нём все элементы которые находится на нечётных позициях, за ранее спасибо http://www.cyberforum.ru/cpp-beginners/thread1118617.html
C++ Найти расстояние между двумя заданными множествами точек на плоскости
Найти расстояние между двумя заданными множествами точек на плоскости, то есть расстояние между наиболее близко расположенными точками этих множеств. За ранее спасибо! :3
Решить уравнение C++
Буду благодарен за помощь))
C++ Дано натуральное число n. Найти все Пифагоровые тройки натуральных чисел http://www.cyberforum.ru/cpp-beginners/thread1118592.html
Дано натуральное число n. Найти все Пифагоровые тройки натуральных чисел, каждые из которых не превышает n, то есть все такие тройки натуральных чисел a, b, c, которые a^2+b^2=c^2 (a<=b<=c<=n).
C++ Ошибка при умножении Возникла проблема не понимаю почему при умножении 567 * 900 = 50103, (программа недробляна поэтому можно только умножать одинаковые цифры по количеству) void Multiplication_Of_Numbers() { int i = 0,j,o=0,tum=0,k0=0,sum; while (number.x>0) { number.mas = number.x % 10;number.x /= 10; } int k = 0,t=0; подробнее

Показать сообщение отдельно
sentike
4 / 4 / 0
Регистрация: 22.08.2013
Сообщений: 49
14.03.2014, 00:12  [ТС]     Реализовать систему плагинов (модулей), каждый из которых должен работать в отдельном потоке
dzrkot, забыл написать: windows и linux
загрузчик как таковой есть
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
bool CLibrary::Load(const char * szPath)
{
    if(!m_pLibrary)
    {
#ifdef WIN32
        m_pLibrary = LoadLibrary(szPath);
#else
        m_pLibrary = dlopen(szPath, RTLD_LAZY);
#endif
        return (m_pLibrary) ? (true) : (false);
    }
    return false;
}
Добавлено через 26 минут
Как реализовать базу функций в плагине и ее обмен между ядром?


Сейчас имеется класс загрузчика:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#if defined(_WIN32) && !defined(WIN32)
#define WIN32
#endif
 
#include "CLibrary.h"
#ifdef WIN32
#include <windows.h>
#else
#include <dlfcn.h>
#include <stdio.h>
#endif
 
CLibrary::CLibrary()
{
    m_pLibrary = NULL;
}
 
CLibrary::~CLibrary()
{
    if(m_pLibrary)
        Unload();
}
 
bool CLibrary::Load(const char * szPath)
{
    if (!m_pLibrary)
    {
#ifdef WIN32
        m_pLibrary = LoadLibrary(szPath);
#else
        m_pLibrary = dlopen(szPath, RTLD_LAZY);
#endif
        return (m_pLibrary) ? (true) : (false);
    }
    return false;
}
 
bool CLibrary::Unload()
{
    if(m_pLibrary)
    {
#ifdef WIN32
        FreeLibrary((HMODULE)m_pLibrary);
#else
        dlclose(m_pLibrary);
#endif
        m_pLibrary = NULL;
        return true;
    }
 
    return false;
}
 
void * CLibrary::GetProcedureAddress(const char * szProcedureName)
{
    if(m_pLibrary)
    {
        void * pProcedureAddress = NULL;
#ifdef WIN32
        pProcedureAddress = (void *)GetProcAddress((HMODULE)m_pLibrary, szProcedureName);
#else
        pProcedureAddress = dlsym(m_pLibrary, szProcedureName);
#endif
        return pProcedureAddress;
    }
 
    return NULL;
}
 
void * CLibrary::GetProcedureAddress(unsigned int uiOrdinal)
{
    // TODO FOR MULTIPLATFORM
    return NULL;
}
И вот так, я вызываю функцию из плагина:
C++ (Qt)
1
2
3
4
5
6
7
8
9
    CLibrary *lib = new CLibrary();
    std::cout <<  "was"<<lib->Load("awesomeplugin.dll");
    typedef void(*fnPtr)(char*);
    fnPtr fnc = (fnPtr)lib->GetProcedureAddress("PopMsg");
    if (fnc)
    {
        // call the PopMsg in TestDLL
        fnc("Exporting C++ Functi11111111ons from DLL");
    }
Сам плагин:
C++ (Qt)
1
2
3
4
5
6
#define EXPORT extern "C" __declspec (dllexport)
 
EXPORT void PopMsg(char *msg)
{
    std::cout << msg << std::endl;
}
 
Текущее время: 04:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru