Не могу понять почему не компилится(Visual Studio .NET 2005)+SP1 слитый с msdn.microsoft.com #pragma comment(linker, "/export:MemoryCopy=KERNEL32.RtlMoveMemory") void main() { int k=0; char chX[256]; char chT[256]; lstrcpyA(chT,"Hello"); MemoryCopy(chX,chT,sizeof("Hello")); MessageBoxA(0,chX,"caption",0); }
#pragma comment(lib, "ntdll") #pragma comment(linker, "/export:MemoryCopy=ntdll.RtlMoveMemory") void main() { int k=0; char chX[256]; char chT[256]; lstrcpyA(chT,"Hello"); MemoryCopy(chX,chT,sizeof("Hello")); MessageBoxA(0,chX,"caption",0); }
сдирание crt memcpy 100% работает просто не могу понять почему все функции из ntdll/kernel32 импортаются рпямой переадресацией а эта не? напрмер #pragma comment(linker, "/export:MemoryCompare=NTDLL.RtlCompareMemory") пашет
короче нафига тебе делать еще одну функцию memorycopy? не проще написать #pragma comment(lib, "ntdll") extern "C" void __stdcall RtlCopyMemory(PVOID, PVOID, DWORD); #define MemoryCopy RtlCopyMemory ?
не подскажишьь как ее в dll запихнуть а то вот extern "C" MEMORY_API WINAPI MemoryCopy(void* p,void* p,int size) ругается second "C" linkage
#pragma once #include <windows.h> #ifndef MEMORY_API #ifdef MEMORY_EXPORTS #define MEMORY_API __declspec(dllexport) #else #define MEMORY_API __declspec(dllimport) #endif #endif
MemoryCopy - это одна из "особенных" функций в последних версиях вижуальной студии и дело даже не в имени функции. В общем, тема уже обсуждалась - компилятор распознаёт код копирования массива байт и пытается его агрессивно оптимизировать (вставляет вызов какой-то функции из CRT), вопреки любым параметрам запрещающим своевольничать.
Quantum Понял на мой вопрос ответили.Тема для меня новая и интересная.Хотелось бы узнать и о других "оптимизациях"(ограничениях) на вижах.Если знаешь подкинь ссылку.
progstone Гугл первой ссылкой выдал этот блог по теме известных багов в Visual C++: http://minimsft.blogspot.com/2005/11/hey-shareholders-vs-2005-is-fantastic.html
Nouzui Не должен, но распознаёт На самом деле эти функции (strlen, memcopy и т.п.) обьявлены в стандартных заголовках, но не факт, что компилятор "распознаёт" их именно на основании хидеров. Скорее всего, имена этих функций захардкодены в самом компиляторе.
Quantum Ходил я по http://minimsft.blogspot.com/2005/11/he … astic.html и другим ссылкам по поиску баг студии есть там пару интересных касающихся .NET(таковые всегда будут) остальные касаются самих IDE/install студии а это не особо интересно есть таковые и в 7.1.Я имел ввиду баги при кодинге
progstone Не понял. В смысле багов/ограничений в поддержке стандарта C/C++? МС в этом плане и не претендует на пальму первенства.