![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| transserg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
привет всем! столкнулся с проблемой... если собираю проект с
то линкер ругается на отсутствие некоторых функция а именно new, memset,malloc,memcpy; чем можно их заменить? а точнее как работать с памятью (выделять, освобождать, копировать, перемещать) чисто на WinAPI... ну выделение как я думаю это HeapAlloc,VirtualAlloc,HeapFree,VirtualFree. а как копировать блоки памяти? что можете посоветовать по этому вопросу? |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
CopyMemory()
|
|||
|
||||
| transserg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
некатит так как использует тот же memcpy |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
transserg, ну значит убери этот дефайн, чтобы оно брало нужную функцию
|
|||
|
||||
| transserg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
GoldFinch в том то и дело что я хочу от CRT отказаться чтоб его небыло в моем проекте... а все упирается в работу с памятью
|
|||
|
||||
| ivanzoid |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.4.2010 Репутация: нет Всего: нет |
transserg,
в ntdll.dll есть такая функция: _memccpy |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Да уж и не только
Так что в системе есть все что нужно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| transserg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
тогда как использовать ту что в ntdll?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
В WDK(DDK) есть ntdll.lib . Но можно и динамически загрузить при помощи LoadLibrary Правда не ясно как обойтись без "new". Без нее вообще никак если писать на С++. Можно попробовать поискать исходники CRT и извлечь оттуда реализацию. Кроме того перестанут работать исключения, RTTI, соответственно dynamic_cast. Т.е. про STL и другие библиотеки можно забыть. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| transserg |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
подключил из WDK но все равно 2 ошибки
Добавлено через 33 секунды может что то еще нужно сделать чтоб он начал использовать их из ntdll? |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
transserg, проверь есть ли в либе эти символы. Возможно, они перекрыты дефайнами из заголовков. Может быть соглашение о вызовах не соответствует, поэтому не находит нужную функцию. Например, ожидается __stdcall , а в заголовке описано как __cdecl . Т.е. возможно придется реализовать самому функцию с нужным прототипом вызвав соответствующую функцию из ntdll.dll.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| transserg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
Alexeis а как им образом это можно сделать? (проверить наличие их в либе)
в настройках проекта переключил тип вазова на __stdcall получил ошибки
при типе вызова __cdecl (/Gd) тоже самое |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
У тебя опция /NODEFAULTLIB блокирует pragma comment.
Отключи опцию NODEFAULTLIB, и вместо main объяви другую точку входа.
|
|||
|
||||
| transserg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 8.8.2009 Репутация: нет Всего: нет |
у меня вот так в проекте
586 хотите сказать что если я спользую #pragma comment(linker, "/NODEFAULTLIB") то #pragma comment(lib, "ntdll.lib" ) небудет работать? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Может тогда ограничить ее действие только на одну библиотеку?
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |