Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с памятью без CRT 
V
    Опции темы
transserg
Дата 2.4.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



привет всем! столкнулся с проблемой... если собираю проект с 
Код
#pragma comment(linker, "/NODEFAULTLIB")

то линкер ругается на отсутствие некоторых функция а именно new, memset,malloc,memcpy;
чем можно их заменить? а точнее как работать с памятью (выделять, освобождать, копировать, перемещать) чисто на WinAPI... ну выделение как я думаю это HeapAlloc,VirtualAlloc,HeapFree,VirtualFree. а как копировать блоки памяти? что можете посоветовать по этому вопросу?
PM MAIL   Вверх
Sartorius
Дата 2.4.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



CopyMemory()
PM MAIL ICQ   Вверх
transserg
Дата 2.4.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



Код

#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
#define CopyMemory RtlCopyMemory

некатит так как использует тот же memcpy
PM MAIL   Вверх
GoldFinch
Дата 2.4.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



transserg, ну значит убери этот дефайн, чтобы оно брало нужную функцию
PM MAIL ICQ   Вверх
transserg
Дата 2.4.2010, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



GoldFinch в том то и дело что я хочу от CRT отказаться чтоб его небыло в моем проекте... а все упирается в работу с памятью
PM MAIL   Вверх
ivanzoid
Дата 2.4.2010, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.4.2010

Репутация: нет
Всего: нет



transserg,

в ntdll.dll есть такая функция: _memccpy

PM MAIL   Вверх
Alexeis
Дата 2.4.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 7
Всего: 459



Цитата(ivanzoid @  2.4.2010,  20:21 Найти цитируемый пост)
в ntdll.dll есть такая функция: _memccpy

  Да уж и не только
Цитата

_wtoi
_wtoi64
_wtol
abs
atan
atoi
atol
bsearch
ceil
cos
fabs
floor
log
mbstowcs
memchr
memcmp
memcpy
memmove
memset
pow
qsort
sin
sprintf
sqrt
sscanf
strcat
strchr
strcmp
strcpy
strcspn
strlen
strncat
strncmp
strncpy
strpbrk
strrchr
strspn
strstr
strtol
strtoul
swprintf
tan
tolower
toupper
towlower
towupper
vsprintf
wcscat
wcschr
wcscmp
wcscpy
wcscspn
wcslen
wcsncat
wcsncmp
wcsncpy
wcspbrk
wcsrchr
wcsspn
wcsstr
wcstol
wcstombs
wcstoul


Так что в системе есть все что нужно.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
transserg
Дата 2.4.2010, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



тогда как использовать ту что в ntdll?
PM MAIL   Вверх
Alexeis
Дата 2.4.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 7
Всего: 459



Цитата(transserg @  2.4.2010,  21:14 Найти цитируемый пост)
тогда как использовать ту что в ntdll? 

В WDK(DDK) есть ntdll.lib . Но можно и динамически загрузить при помощи LoadLibrary

  Правда не ясно как обойтись без "new". Без нее вообще никак если писать на С++. Можно попробовать поискать исходники CRT и извлечь оттуда реализацию. Кроме того перестанут работать исключения, RTTI, соответственно dynamic_cast. Т.е. про STL и другие библиотеки можно забыть.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
transserg
Дата 2.4.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



Код

#pragma comment(lib, "ntdll.lib")
  
подключил из WDK но все равно 2 ошибки
Код

Error    6    error LNK2001: unresolved external symbol _memset    scnathread.obj
Error    7    error LNK2001: unresolved external symbol _memcpy    main.obj



Добавлено через 33 секунды
может что то еще нужно сделать чтоб он начал использовать их из ntdll?
PM MAIL   Вверх
Alexeis
Дата 2.4.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 7
Всего: 459



transserg, проверь есть ли в либе эти символы. Возможно, они перекрыты дефайнами из заголовков. Может быть соглашение о вызовах не соответствует, поэтому не находит нужную функцию. Например, ожидается __stdcall , а в заголовке описано как __cdecl . Т.е. возможно придется реализовать самому функцию с нужным прототипом вызвав соответствующую функцию из ntdll.dll. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
transserg
Дата 2.4.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



Alexeis а как им образом это можно сделать? (проверить наличие их в либе)
в настройках проекта переключил тип вазова на __stdcall
получил ошибки 
Код

Error    8    error LNK2019: unresolved external symbol _memcpy referenced in function "bool __stdcall ReadSitting(void *)" (?ReadSitting@@YG_NPAX@Z)    main.obj
Error    9    error LNK2001: unresolved external symbol _memcpy    scnathread.obj
Error    10    error LNK2019: unresolved external symbol _memset referenced in function "wchar_t * __stdcall GetFlashVolumSerial(wchar_t *)" (?GetFlashVolumSerial@@YGPA_WPA_W@Z)    scnathread.obj
Error    11    error LNK2001: unresolved external symbol _memset    scnathread.obj


при типе вызова __cdecl (/Gd) тоже самое
PM MAIL   Вверх
586
Дата 3.4.2010, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



У тебя опция /NODEFAULTLIB блокирует pragma comment.
Отключи опцию NODEFAULTLIB, и вместо main объяви другую точку входа.
Код
#include <windows.h>
#pragma comment (linker, "/entry:MyEntryPoint")
#pragma comment (lib, "ntdll.lib")

int MyEntryPoint()
{
    //...
    return 0;
}

PM   Вверх
transserg
Дата 3.4.2010, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



 у меня вот так в проекте 
Код

#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/SECTION:.text,EWR")
#pragma comment(linker, "/ENTRY:myWinMain")
#pragma comment(linker, "/SUBSYSTEM:WINDOWS" )
#pragma optimize( "gsy", on )
#pragma comment(linker, "/NODEFAULTLIB") 
#pragma comment(linker, "/INCREMENTAL:NO" ) 
#pragma comment(lib, "ntdll.lib" ) 

586 хотите сказать что если я спользую 
#pragma comment(linker, "/NODEFAULTLIB") то #pragma comment(lib, "ntdll.lib" )  небудет работать?
PM MAIL   Вверх
Alexeis
Дата 3.4.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 7
Всего: 459



Цитата(586 @  3.4.2010,  00:19 Найти цитируемый пост)
У тебя опция /NODEFAULTLIB блокирует pragma comment.

Может тогда ограничить ее действие только на одну библиотеку?

Код

#pragma comment(linker, "/NODEFAULTLIB:libcmt.lib") 





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.