ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷..."/> ¸÷ÈË¿´¹ý¹¬¶·¾çµÄ»° £¬¿ÉÄÜÒ²ÄÜÏëÏóµ½²ÌÂ׵ľ½¿ö..."/>

ÌÚ²©tengbo9885¹ÙÍø

ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷...

ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷...

¡¶ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷...¡·¾çÇé¼ò½é£º¸÷ÈË¿´¹ý¹¬¶·¾çµÄ»°¿ÉÄÜÒ²ÄÜÏëÏóµ½²ÌÂ׵ľ½¿ö...ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷...ºäºäºäC++»ù´¡Óï·¨ÊáÀí£ºWindows µÄ¶¯Ì¬Á´½Ó¿â2021-11-01 17:46¡¤CÓïÑÔ±à³ÌWindows Ó¦ÓóÌÐòÈë¿Úº¯ÊýGUI£¨Graphical User Interface£©Ó¦ÓÃÁ´½ÓÆ÷Ñ¡Ï/SUBSYSTEM:WINDOWSCUI£¨Console User Interface£©Ó¦ÓÃÁ´½ÓÆ÷Ñ¡Ï/SUBSYSTEM:CONSOLE_tWinMain Óë _tmain º¯ÊýÉùÃ÷Int WINAPI _tWinMain( HINSTANCE hInstanceExe, HINSTANCE, PTSTR pszCmdLine, int nCmdShow);int _tmain( int argc, TCHAR *argv[], TCHAR *envp[]);Windows µÄ¶¯Ì¬Á´½Ó¿â£¨Dynamic-Link Library£©²¿·Ö֪ʶµãÀ´×Ô¡¶Windows ½¹µã±à³Ì£¨µÚÎå°æ£©¡·Óô¦£¨1£©À©Õ¹ÁËÓ¦ÓóÌÐòµÄÌØÕ÷£¨2£©¼ò»¯ÁËÏîÄ¿¹ÜÀí£¨3£©ÓÐÖúÓÚ½ÚÔ¼Äڴ棨4£©Ôö½øÁË×ÊÔ´µÄ¹²Ïí£¨5£©Ôö½øÁËÍâµØ»¯£¨6£©ÓÐÖúÓÚ½â¾öƽ̨¼äµÄ²î±ð£¨7£©¿ÉÒÔÓÃÓÚÌØÊâÄ¿µÄ×¢ÖØ£¨1£©½¨Éè DLLÊÂʵÉÏÊÇÔÚ½¨Éè¿É¹©Ò»¸ö¿ÉÖ´ÐÐÄ £¿éŲÓõĺ¯Êý£¨2£©µ±Ò»¸öÄ £¿éÌṩһ¸öÄÚ´æ·ÖÅɺ¯Êý£¨malloc¡¢new£©µÄʱ¼äËü±ØÐèͬʱÌṩÁíÒ»¸öÄÚ´æÊͷź¯Êý£¨free¡¢delete£©£¨3£©ÔÚʹÓà C ºÍ C++ »ì±àµÄʱ¼äҪʹÓà extern "C" ÐÞÊηû£¨4£©Ò»¸ö DLL ¿ÉÒÔµ¼³öº¯Êý¡¢±äÁ¿£¨×èÖ¹µ¼³ö£©¡¢C++ Àࣨµ¼³öµ¼ÈëÐèҪͬ±àÒëÆ÷²»È»×èÖ¹µ¼³ö£©£¨5£©DLL Ä £¿é£ºcpp ÎļþÖÐµÄ __declspec(dllexport) дÔÚ include Í·Îļþ֮ǰ£¨6£©Å²Óà DLL µÄ¿ÉÖ´ÐÐÄ £¿é£ºcpp ÎļþµÄ __declspec(dllimport) ֮ǰ²»Ó¦¸Ã½ç˵ MYLIBAPI¼ÓÔØ Windows ³ÌÐòµÄËÑË÷˳Ðò1¡¢°üÀ¨¿ÉÖ´ÐÐÎļþµÄĿ¼2¡¢Windows µÄϵͳĿ¼¿ÉÒÔͨ¹ý GetSystemDirectory »ñµÃ3¡¢16 λµÄϵͳĿ¼¼´ Windows Ŀ¼ÖÐµÄ System ×ÓĿ¼4¡¢Windows Ŀ¼¿ÉÒÔͨ¹ý GetWindowsDirectory »ñµÃ5¡¢Àú³ÌµÄÄ¿½ñĿ¼6¡¢PATH ÇéÐαäÁ¿ÖÐËùÁгöµÄĿ¼DLL Èë¿Úº¯ÊýDllMain º¯ÊýBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){ switch(fdwReason) { case DLL_PROCESS_ATTACH: // µÚÒ»´Î½«Ò»¸öDLLÓ³Éäµ½Àú³ÌµØÖ·¿Õ¼äʱŲÓà // The DLL is being mapped into the process' address space. break; case DLL_THREAD_ATTACH: // µ±Àú³Ì½¨ÉèÒ»¸öÏ̵߳Äʱ¼äÓÃÓÚ¸æËßDLLÖ´ÐÐÓëÏß³ÌÏà¹ØµÄ³õʼ»¯£¨·ÇÖ÷Ïß³ÌÖ´ÐУ© // A thread is bing created. break; case DLL_THREAD_DETACH: // ϵͳŲÓà ExitThread Ïß³ÌÍ˳öǰ¼´½«ÖÕÖ¹µÄÏß³Ìͨ¹ý¸æËßDLLÖ´ÐÐÓëÏß³ÌÏà¹ØµÄÕûÀí // A thread is exiting cleanly. break; case DLL_PROCESS_DETACH: // ½«Ò»¸öDLL´ÓÀú³ÌµÄµØÖ·¿Õ¼äʱŲÓà // The DLL is being unmapped from the process' address space. break; } return (TRUE); // Used only for DLL_PROCESS_ATTACH}ÔØÈëÐ¶ÔØ¿âLoadLibrary¡¢LoadLibraryExA¡¢LoadPackagedLibrary¡¢FreeLibrary¡¢FreeLibraryAndExitThread º¯ÊýÉùÃ÷// ÔØÈë¿âHMODULE WINAPI LoadLibrary( _In_ LPCTSTR lpFileName);HMODULE LoadLibraryExA( LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);// ÈôÒªÔÚͨÓà Windows ƽ̨£¨UWP£©Ó¦ÓÃÖмÓÔØ Win32 DLLÐèҪŲÓà LoadPackagedLibrary¶ø²»ÊÇ LoadLibrary »ò LoadLibraryExHMODULE LoadPackagedLibrary( LPCWSTR lpwLibFileName, DWORD Reserved);// Ð¶ÔØ¿âBOOL WINAPI FreeLibrary( _In_ HMODULE hModule);// Ð¶ÔØ¿âºÍÍ˳öÏß³ÌVOID WINAPI FreeLibraryAndExitThread( _In_ HMODULE hModule, _In_ DWORD dwExitCode);ÏÔʾµØÁ´½Óµ½µ¼³ö·ûºÅGetProcAddress º¯ÊýÉùÃ÷FARPROC GetProcAddress( HMODULE hInstDll, PCSTR pszSymbolName // Ö»ÄܽÓÊÜ ANSI ×Ö·û´®²»¿ÉÊÇ Unicode);DumpBin.exe Éó²é DLL ÐÅÏ¢ÔÚ VS µÄ¿ª·¢Ö°Ô±ÏÂÁîÌáÐÑ·û ʹÓà DumpBin.exe ¿ÉÉó²é DLL ¿âµÄµ¼³ö¶Î£¨µ¼³öµÄ±äÁ¿¡¢º¯Êý¡¢ÀàÃûµÄ·ûºÅ£©¡¢Ïà¶ÔÐéÄâµØÖ·£¨RVArelative virtual address£©È磺LoadLibrary Óë FreeLibrary Á÷³ÌͼLoadLibrary Óë FreeLibrary Á÷³ÌͼLoadLibraryFreeLibraryDLL ¿âµÄ±àд£¨µ¼³öÒ»¸ö DLL Ä £¿é£©DLL ¿âµÄ±àд£¨µ¼³öÒ»¸ö DLL Ä £¿é£© DLL Í·Îļþ// MyLib.h#ifdef MYLIBAPI// MYLIBAPI Ó¦¸ÃÔÚËùÓÐ DLL Ô´ÎļþµÄ include "Mylib.h" ֮ǰ±»½ç˵// ËùÓк¯Êý/±äÁ¿ÕýÔÚ±»µ¼³ö#else// Õâ¸öÍ·Îļþ±»Ò»¸öexeÔ´´úÂëÄ £¿é°üÀ¨Òâζ×ÅËùÓк¯Êý/±äÁ¿±»µ¼Èë#define MYLIBAPI extern "C" __declspec(dllimport)#endif// ÕâÀï½ç˵ÈκεÄÊý¾Ý½á¹¹ºÍ·ûºÅ// ½ç˵µ¼³öµÄ±äÁ¿£¨×èÖ¹µ¼³ö±äÁ¿£©MYLIBAPI int g_nResult;// ½ç˵µ¼³öº¯ÊýÔ­ÐÍMYLIBAPI int Add(int nLeft, int nRight);DLL Ô´Îļþ// MyLibFile1.cpp// °üÀ¨±ê×¼WindowsºÍCÔËÐÐʱͷÎļþ#include // DLLÔ´ÂëÎļþµ¼³öµÄº¯ÊýºÍ±äÁ¿#define MYLIBAPI extern "C" __declspec(dllexport)// °üÀ¨µ¼³öµÄÊý¾Ý½á¹¹¡¢·ûºÅ¡¢º¯Êý¡¢±äÁ¿#include "MyLib.h"// ½«´ËDLLÔ´´úÂëÎļþµÄ´úÂë·ÅÔÚ´Ë´¦int g_nResult;int Add(int nLeft, int nRight){ g_nResult = nLeft + nRight; return g_nResult;}DLL ¿âµÄʹÓã¨ÔËÐÐʱ¶¯Ì¬Á´½Ó DLL£©DLL ¿âµÄʹÓã¨ÔËÐÐʱ¶¯Ì¬Á´½Ó DLL£©// A simple program that uses LoadLibrary and // GetProcAddress to access myPuts from Myputs.dll. #include #include typedef int (__cdecl *MYPROC)(LPWSTR); int main( void ) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; // Get a handle to the DLL module. hinstLib = LoadLibrary(TEXT("MyPuts.dll")); // If the handle is valid, try to get the function address. if (hinstLib != NULL) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); // If the function address is valid, call the function. if (NULL != ProcAdd) { fRunTimeLinkSuccess = TRUE; (ProcAdd) (L"Message sent to the DLL function\n"); } // Free the DLL module. fFreeResult = FreeLibrary(hinstLib); } // If unable to call the DLL function, use an alternative. if (! fRunTimeLinkSuccess) printf("Message printed from executable\n"); return 0;}ÔËÐп⣨Runtime Library£©µä·¶³ÌÐòÔËÐа취£¨1£©²Ù×÷ϵͳ½¨ÉèÀú³Ì°Ñ¿ØÖÆÈ¨½»¸ø³ÌÐòµÄÈë¿Ú£¨ÍùÍùÊÇÔËÐпâÖеÄij¸öÈë¿Úº¯Êý£©£¨2£©Èë¿Úº¯Êý¶ÔÔËÐпâºÍ³ÌÐòÔËÐÐÇéÐξÙÐгõʼ»¯£¨°üÀ¨¶Ñ¡¢I/O¡¢Ï̡߳¢È«¾Ö±äÁ¿½á¹¹µÈµÈ£©£¨3£©Èë¿Úº¯Êý³õʼ»¯ºóŲÓà main º¯ÊýÕýʽ×îÏÈÖ´ÐгÌÐòÖ÷Ì岿·Ö£¨4£©main º¯ÊýÖ´ÐÐÍê±Ïºó·µ»Øµ½Èë¿Úº¯Êý¾ÙÐÐÕûÀíÊÂÇ飨°üÀ¨È«¾Ö±äÁ¿Îö¹¹¡¢¶ÑÏú»Ù¡¢¹Ø±ÕI/OµÈ£©È»ºó¾ÙÐÐϵͳŲÓÿ¢ÊÂÀú³ÌÒ»¸ö³ÌÐòµÄ I/O Ö¸´ú³ÌÐòÓëÍâ½çµÄ½»»¥°üÀ¨Îļþ¡¢¹Ü³Ì¡¢ÍøÂç¡¢ÏÂÁîÐС¢Ðźŵȸü¹ãÒ嵨½²I/O Ö¸´ú²Ù×÷ϵͳÃ÷ȷΪ Îļþ µÄÊÂÎïglibc Èë¿Ú_start -> __libc_start_main -> exit -> _exitÆäÖÐ main(argc, argv, __environ) º¯ÊýÔÚ __libc_start_main ÀïÖ´ÐÐMSVC CRT Èë¿Úint mainCRTStartup(void)Ö´ÐÐÈçϲÙ×÷£º£¨1£©³õʼ»¯ºÍ OS °æ±¾ÓйصÄÈ«¾Ö±äÁ¿£¨2£©³õʼ»¯¶Ñ£¨3£©³õʼ»¯ I/O£¨4£©»ñÈ¡ÏÂÁîÐвÎÊýºÍÇéÐαäÁ¿£¨5£©³õʼ»¯ C ¿âµÄһЩÊý¾Ý£¨6£©Å²Óà main ²¢¼Í¼·µ»ØÖµ£¨7£©¼ì²é¹ýʧ²¢½« main µÄ·µ»ØÖµ·µ»ØC ÓïÑÔÔËÐп⣨CRT£©´óÖ°üÀ¨ÈçϹ¦Ð§£ºÆô¶¯ÓëÍ˳ö£º°üÀ¨Èë¿Úº¯Êý¼°Èë¿Úº¯ÊýËùÒÀÀµµÄÆäËûº¯ÊýµÈ±ê×¼º¯Êý£ºÓÐ C ÓïÑÔ±ê×¼»®¶¨µÄCÓïÑÔ±ê×¼¿âËùÓµÓеĺ¯ÊýʵÏÖI/O£ºI/O ¹¦Ð§µÄ·â×°ºÍʵÏÖ¶Ñ£º¶ÑµÄ·â×°ºÍʵÏÖÓïÑÔʵÏÖ£ºÓïÑÔÖÐÒ»Ð©ÌØÊ⹦ЧµÄʵÏÖµ÷ÊÔ£ºÊµÏÖµ÷ÊÔ¹¦Ð§µÄ´úÂëCÓïÑÔ±ê×¼¿â£¨ANSI C£©°üÀ¨£º±ê×¼ÊäÈëÊä³ö£¨stdio.h£©Îļþ²Ù×÷£¨stdio.h£©×Ö·û²Ù×÷£¨ctype.h£©×Ö·û´®²Ù×÷£¨string.h£©Êýѧº¯Êý£¨math.h£©×ÊÔ´¹ÜÀí£¨stdlib.h£©ÃûÌÃת»»£¨stdlib.h£©Ê±¼ä/ÈÕÆÚ£¨time.h£©¶ÏÑÔ£¨assert.h£©ÖÖÖÖÀàÐÍÉϵij£Êý£¨limits.h & float.h£©±ä³¤²ÎÊý£¨stdarg.h£©·Ç¾Ö²¿Ìø×ª£¨setjmp.h£©½ñÌìµÄ·ÖÏí¾Íµ½ÕâÀïÁ˸÷ÈËÒªºÃÇÚѧC++Ó´~дÔÚ×îºó£º¹ØÓÚ×¼±¸Ñ§Ï°C/C++±à³ÌµÄС»ï°éÈôÊÇÄãÏë¸üºÃµÄÌáÉýÄãµÄ±à³Ì½¹µãÄÜÁ¦£¨ÄÚ¹¦£©ÎÞ·Á´ÓÏÖÔÚ×îÏȱà³ÌѧϰÊé¼®·ÖÏí£º±à³ÌѧϰÊÓÆµ·ÖÏí£ºÕûÀí·ÖÏí£¨¶àÄêѧϰµÄÔ´Âë¡¢ÏîĿʵսÊÓÆµ¡¢ÏîÄ¿Ìõ¼Ç»ù´¡ÈëÃŽ̳̣©»¶Ó­×ªÐкÍѧϰ±à³ÌµÄ»ï°éʹÓøü¶àµÄ×ÊÁÏѧϰÉú³¤±È×Ô¼º×ÁÄ¥¸ü¿ìŶ¹ØÓÚC/C++¸ÐÐËȤ¿ÉÒÔ¹Ø×¢Ð¡±àÔÚºǫ́˽ÐÅÎÒ£º¡¾±à³Ì½»Á÷¡¿Ò»ÆðÀ´Ñ§Ï°Å¶¿ÉÒÔÁìȡһЩC/C++µÄÏîĿѧϰÊÓÆµ×ÊÁÏŶÒѾ­ÉèÖúÃÁËÒªº¦´Ê×Ô¶¯»Ø¸´×Ô¶¯ÁìÈ¡¾ÍºÃÁË

¡¶ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷...¡·ÊÓÆµËµÃ÷£ºËûÒ»¶¨Óв½·¥............¿ªÅ̰뵼Ìå°å¿éÕûÌ屬·¢ÖÐо¹ú¼Ê¡¢¸´µ©Î¢µç¡¢»ªºç¹«Ë¾¡¢ÖÐ΢¹«Ë¾µÈ30¶àÖ»¸ö¹ÉÕÇÍ£ÐÂÎÅÃæÉÏ10ÔÂÒÔÀ´¸Û¹É°ëµ¼Ìå°å¿éÒ»Á¬´óÕÇÖÐо¹ú¼Ê±¾ÔÂÀÛÕǽü60%ÉϺ£¸´µ©±¾ÔÂÀÛÕÇ73%»ªºç°ëµ¼Ìå±¾ÔÂÀÛÕÇ55%¼ÌÐøÐû²¼

±à¾ç£º
¸üУº

2025-10-10 21:47:18

±¸×¢£º
¹úÓï
ÆÀ¼Û£º
ÃûÌÃÍæÅª¹«Ö÷ÓÈÎïspsm(ÅÝܽµ°Ì¢¿É°®¶à)_ÃûÌÃÍæÅª¹«Ö÷...
Ê×Ò³
Ó°Ï·
Ò»Á¬¾ç
×ÛÒÕ
¶¯Âþ
APP
ÍøÕ¾µØÍ¼