Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
1

WinAPI альтернатива memcpy

18.03.2017, 17:48. Показов 4694. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень тупой вопрос - есть ли WinAPI альтернатива memcpy и как ее вызвать?
И да, я знаю про CopyMemory, но оно WinAPI процедуры вызывать не хочет.
C++
1
2
3
#define CopyMemory RtlCopyMemory
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
//wait, OH SHI—
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2017, 17:48
Ответы с готовыми решениями:

Альтернатива Application.ProcessMessages для WinAPI
Есть такая полезная команда Application.ProcessMessages, но она работает в Delphi. Как получить...

Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy
Бывает ли на практике такое, что код #define size 1000; // some value int x, y; /* ... */...

Улучшенная альтернатива HDD или ухудшенная альтернатива SSD
Как я заметил, в ПК для офисных задач самое узкое место - это устройство хранения данных. Поэтому...

Memcpy
Проблема такая, что если я ввожу хекс отрицательного числа, то d присваивается значение NaN. Почему...

5
Заблокирован
18.03.2017, 18:00 2
Тут же дан пример: https://msdn.microsoft.com/en-... s.85).aspx
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
18.03.2017, 18:01  [ТС] 3
Цитата Сообщение от nimazzzy Посмотреть сообщение
Тут же дан пример: https://msdn.microsoft.com/en-... s.85).aspx
В старт-посте же дана цитата из хедеров. CopyMemory просто редиректит на memcpy.
0
Заблокирован
19.03.2017, 01:46 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
void * __cdecl memcpy(void *dst, const void *src, size_t count)
{
    void * ret = dst;
    
    while (count--) {
        *(char *)dst = *(char *)src;
        dst = (char *)dst + 1;
        src = (char *)src + 1;
    }
    
    return(ret);
}
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
19.03.2017, 02:03  [ТС] 5
Цитата Сообщение от stamp Посмотреть сообщение
void * __cdecl memcpy(void *dst, const void *src, size_t count)
Если уж писать свое, то сразу хорошо. То есть, с оптимизациями "копировать long long быстрее будет", а то и ассемблерными вставками, ибо у процессора наверняка есть специализированные инструкции для копирования блоков данных.
А вот вместо такого наколеночного тяп-ляп, лишь бы работало, хотелось бы просто вызвать готовую WinAPI реализацию.
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
19.03.2017, 09:56 6
Лучший ответ Сообщение было отмечено Renji как решение

Решение

Renji, ntdll.dll экспортирует memcpy

C++
1
2
3
4
5
6
7
8
9
10
    typedef void (__cdecl *memcpy_)(void *dest, const void *src, size_t count);
 
    const memcpy_ memcpyPtr = (memcpy_)GetProcAddress(GetModuleHandle("ntdll.dll"), "memcpy");
 
    const char StrSrc [] = "Hello";
    char StrDst [sizeof(StrSrc)];
 
    memcpyPtr(StrDst, StrSrc, sizeof(StrSrc));
 
    std::cout << StrDst << std::endl;
1
19.03.2017, 09:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2017, 09:56
Помогаю со студенческими работами здесь

2d ---> 1d array и memcpy
Можно ли сконвертировать двумерный массив в одномерный с помощью memcpy? Если да, то будет ли...

memset, memcpy
Использую MSVS 2008. Почему memcpy работает только с char? То есть, такой код работает: int...

Функция memcpy
Здравствуйте. В Си есть функция memcpy(), копирующая содержимое одной области памяти в другую. Не...

Не работает memcpy
Нужно просто полностью скопировать первый массив, во второй, длина у них одинакова. Делаю так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru