Форум программистов, компьютерный форум 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 Gray = new IplImage(Img.GetSize(), BitDepth.U8, 1); IplImage R = new IplImage(Img.GetSize(), BitDepth.U8, 1); IplImage G = new IplImage(Img.GetSize(), BitDepth.U8, 1); ...
C++ Какая форма записи вам ближе?
Какая форма записи вам ближе 1 if ( !valid ) или 2 if ( valid == 0 )
C++ Техническое зрение, нейронные сети http://www.cyberforum.ru/cpp/thread1695819.html
А есть книги по техническому(машинному) зрению, нейронным сетям, касающиеся С++? Также не помешала бы литература например по OpenCV на С++ и подобное. Может кто найти?
C++ Переход по адресу из массива байт не знаю просто как правильно назвать тему до форматирования пк была у меня она очень интересная функция в общем есть допустим любой адрес 0x89889898 этот адрес не что иное как означает переход на другой адрес если считать его на оборот то получится 0x98988889 тут мне нужна помощь если не трудно то полный код помню что там менялся 1 байт с 4, а 3 со 2 и получался переход по данному адресу... подробнее

Показать сообщение отдельно
DrOffset
6919 / 4112 / 940
Регистрация: 30.01.2014
Сообщений: 6,908
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 не увидит.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru