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

Указатель на функцию - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Замер времени работы участка кода http://www.cyberforum.ru/cpp/thread1696528.html
Сразу скажу что меня не интересуют стандартные замеры времени роботы участка кода, так как они показывают время роботы данного участка кода + время роботы других процессов (до момента завершения...
C++ Кроссплатформенный способ переноса файлов Есть какой-нибудь легальный способ кроссплатформенного переноса папок/файлов в C++? Желательно именно способы переноса, а не copy/remove, т.к. внутри одного диска простой перенос будет моментальным. http://www.cyberforum.ru/cpp/thread1696384.html
OpenCV преобразовать изображение в полутоновое C++
На просторах интернета нашел код на c#: Bitmap BMP = (Bitmap)pictureBox1.Image; IplImage Img = new IplImage(); Img = BMP.ToIplImage(); IplImage...
C++ Какая форма записи вам ближе?
Какая форма записи вам ближе 1 if ( !valid ) или 2 if ( valid == 0 )
C++ Техническое зрение, нейронные сети http://www.cyberforum.ru/cpp/thread1695819.html
А есть книги по техническому(машинному) зрению, нейронным сетям, касающиеся С++? Также не помешала бы литература например по OpenCV на С++ и подобное. Может кто найти?
C++ Переход по адресу из массива байт не знаю просто как правильно назвать тему до форматирования пк была у меня она очень интересная функция в общем есть допустим любой адрес 0x89889898 этот адрес не что иное как означает переход на... подробнее

Показать сообщение отдельно
DrOffset
7320 / 4420 / 1001
Регистрация: 30.01.2014
Сообщений: 7,258
29.03.2016, 13:37
i_s_m_mipt, можно использовать платформозависимые функции GetProcAddress (для Win) и dlsym (для *nix), чтобы получить указатель на функцию из собственного процесса (или из другой dll/so).

Естественно, нужные функции должны быть помечены как экспортируемые.
Пример для *nix:

C++
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
#include <iostream>
 
#include <dlfcn.h>
 
extern "C" void test(char const * text)
{
    std::cout << "hello [" << text << "] world!\n";
}
 
int main()
{
    void * self = ::dlopen(NULL, RTLD_LAZY);
    
    if(self)
    {
        void(*p)(char const *) = (void(*)(char const *))::dlsym(self, "test");
    
        if(p)
        {
            p("check");
        }
        
        ::dlclose(self);
    }
}
Онлайн пример: http://rextester.com/ODB2007 (Clang)

Обрати внимание на ключик -Wl,--export-dynamic. Также в GCC/Clang возможно составить список конкретных функций для экспорта (-Wl,--dynamic-list).


Пример для Win:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
 
extern "C" __declspec(dllexport) void test(char const * text)
{
    std::cout << "hello [" << text << "] world!\n";
}
 
int main()
{
    HINSTANCE self = ::GetModuleHandle(NULL); 
    if(self)
    {
        void(*p)(char const *) = (void(*)(char const *))::GetProcAddress(self, "test");
        
        if(p)
        {
            p("check");
        }
    }
}
Онлайн пример: http://rextester.com/TWK98848 (VC++)

Обрати внимение на __declspec(dllexport), без этого твою функцию GetProcAddress не увидит.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru