የኮንሶል መገልገያ አርታዒ፡ በEXE DLL ፋይሎች ውስጥ መርጃዎችን ማስተካከል

አዲስ ሪሶርስ dll መገንባት በሚያስፈልገኝ ቁጥር በብስጭት መፈለግ እጀምራለሁ። አስፈላጊ መረጃ. ሰልችቶታል! አስፈላጊ ነው ብዬ የማስበውን ሁሉ እዚህ አስቀምጣለሁ።

በአንድሬ ቡሽማን ደግ ፍቃድ፣ ከሞላ ጎደል አባዛዋለሁ። ከ Andrey የተነሱትን ቅጽበታዊ ገጽ እይታዎች (በደንብ፣ ለራሴ ብቻ) ከVS2015 CommunityEdition ቅጽበታዊ ገጽ እይታዎች ጋር እጨምራለሁ። የራስ አስተያየቶችማብራሪያዎችን በሰያፍ እጽፋለሁ።
ጽሑፉ የተፃፈው ለAutoCAD 2009 ነው፣ ነገር ግን በሌሎች የAutoCAD ስሪቶች ላይ ጥሩ ይሰራል።

በCUI ፋይሎች ውስጥ ጥቅም ላይ የሚውሉ ስዕላዊ ምስሎች ከውጫዊ BMP ፋይሎች ወይም እነዚህ ምስሎች ከተቀመጡበት ከማይተዳደረው DLL ምንጭ ፋይል ሊወሰዱ ይችላሉ። ሁለተኛው ዘዴ ለመጠቀም የበለጠ አመቺ ነው. እዚህ እንደዚህ ያሉ DLL ፋይሎችን እንዴት መፍጠር እንደሚችሉ እና በ CUI ፋይሎች ውስጥ እንዴት እንደሚጠቀሙባቸው እንመለከታለን.

AutoCAD ለረጅም ጊዜ (ከ2010 ስሪት ጀምሮ)የ CUIX ቅርጸትን እንደ ይጠቀማል ከፊል ፋይሎችምናሌ, ይህም መደበኛ ማህደርቅጥያው ከዚፕ ወደ CUIX ተቀይሯል። ሆኖም ግን, ኩባንያችን ከ CUIX ጋር አብሮ መስራት የማይችል AutoCAD 2009 SP3 ይጠቀማል, ነገር ግን የቆየ ቅርጸት - CUI ፋይሎችን ይጠቀማል, ይዘቶቹ በኤክስኤምኤል ቅርጸት ቀርበዋል.

በተጨማሪም ፣ ከ 2015 ስሪት ጀምሮ ፣ ካልተሳሳትኩ ፣ ሁለት የንድፍ አማራጮች ወደ AutoCAD ገብተዋል - ጨለማ ጭብጥእና ቀላል ጭብጥ. በሁለቱም ቦታዎች ላይ የሚታይ አዶ መስራት በጣም ከባድ ነው. እና በራሪው ላይ የምስሉን ስም መቀየር የተሻለ ነገር አይደለም ምርጥ መፍትሄ. ተጨማሪ ዝርዝሮች ከታች.

የንብረት DLL ፋይል መፍጠር

በኤም.ኤስ. ቪዥዋል ስቱዲዮ 2012 መፍጠር አዲስ ፕሮጀክትበባዶ ፕሮጄክት አብነት ላይ በመመስረት የተፈለገውን ስም ይሰይሙ።

አሁን በመስኮቱ ውስጥ መፍትሔ አሳሽተጫን በቀኝ ጠቅ ያድርጉመዳፊት በፕሮጀክቱ ስም እና በሚታየው አውድ ምናሌ ውስጥ ንጥሉን ይምረጡ ንብረቶች. አስፈላጊዎቹን እሴቶች ለንብረቶች መመደብ የዒላማ ማራዘሚያእና የማዋቀር አይነት:

በተጨማሪም ፣ በፕሮጀክት ቅንጅቶች ውስጥ አንድ ተጨማሪ አማራጭ መለወጥ ያስፈልግዎታል - የመግቢያ ነጥብ የለም

ከላይ የተጠቀሱትን ለውጦች ካደረጉ በኋላ ቁልፉን ይጫኑ ያመልክቱእና እሺ. አሁን ባዶ ፕሮጄክታችን ባህሪያት በትክክል ተዋቅረዋል። በትሩ ላይ መፍትሔ አሳሽ፣ ከ የአውድ ምናሌፕሮጀክት, ንጥሉን ይምረጡ አክል -> አዲስ ንጥል...እና በሚታየው የንግግር ሳጥን ውስጥ የንብረት ፋይል አብነት ይምረጡ፡-

ለፋይሉ ማንኛውንም ስም መመደብ ይችላሉ, በእኛ ምሳሌ ውስጥ እንተዋለን resource.rc. አዝራሩን ተጫን አክል. ያከልነው ፋይል በእኛ CUI(x) ፋይሎች ውስጥ ጥቅም ላይ የሚውሉ የምስሎች ዝርዝር ይይዛል።

አንድሬ በዲኤልኤል ውስጥ “የሚነዱ” ምስሎችን ወደ የምስል ንዑስ ማውጫ ውስጥ እንዲያስቀምጡ ይመክራል። ምንም እንኳን ወሳኝ ባይሆንም ሙሉ በሙሉ ምክንያታዊ ምክር። ሌላው ጥያቄ አሁንም ሀብቶችን "እንዲሰሉ" እንዲያስቀምጡ አጥብቄ እመክራለሁ. አንጻራዊ መንገድ. ከአንድ በላይ የሥራ ቦታዎች ላይ ልማት ቢካሄድ በጣም ይረዳል.

እንደ ሙከራ፣ እንጨምር BMP ፋይሎች የተለያዩ መጠኖች: 16x16, 24x24, 32x32, 48x48, 64x64 እና 128x128. በመሳሪያ ቤተ-ስዕል ላይ ያሉ አዝራሮች 16x16 ምስሎችን መያዝ አለባቸው, በ Ribbon ቤተ-ስዕሎች ላይ የተቀመጡ አዝራሮች ግን ትልቅ ናቸው. በሙከራ CUI ፋይላችን ውስጥ የተለያዩ መጠኖችን የመጠቀምን ውጤት ለማየት ከላይ ያሉትን ጥራቶች እዚህም እዚያም እናስቀምጣለን።

ማብራሪያ፡- BMP በቪኤስ ላይ ለመጫን ዋስትና ሊሰጠው ይገባል. ለ GIMP ተጠቃሚዎች ምርጡ አይደለም። ምርጥ ዜና BMP በ 24 ቢት የቀለም ጥልቀት መፈጠር እና ያለ መጭመቅ መቀመጥ አለበት። ያለ መጨናነቅ ማስቀመጥ ካልቻሉ ይጠቀሙ ባች ልወጣጋር FastStone በመጠቀም ምስል መመልከቻየተፈለገውን ውጤት በቀላሉ ማግኘት ይችላሉ.

ፋይሎችን ወደ ላይ መቅዳት ይቻል ነበር። PNG ቅርጸትሆኖም፣ AutoCAD 2009 የዚህን ቅርጸት ምስሎች በCUI ፋይሎች ውስጥ መጠቀም አይችልም።

ማብራሪያ* .bmp ሳይሆን * .ico ፋይሎችን ለማገናኘት መሞከር ትችላለህ። እርግጥ ነው, አንዳንዶቹ ተጨማሪ ሥራ, ግን ይቻላል.
በአሮጌ ስሪቶች ውስጥ፣ የጀርባውን "ግልጽነት" ለማረጋገጥ መጠቀም አለብዎት RGB ቀለም 192,192,192. የቆዩ የAutoCAD ስሪቶች እንደ ግልጽነት ይመለከቱታል።
እና ሌላ ነገር እዚህ አለ - AutoCAD2018 ከአሁን በኋላ bmp "አይረዳም" እና png ብቻ ይፈልጋል

አሁን ወደ እኛ IDE ተመለስ፡ ወደ ትሩ ቀይር የንብረት እይታ.

ከResource.rc አባል አውድ ምናሌ ንጥሉን ይደውሉ ምንጭ አክል...

በንግግር ሳጥን ውስጥ ሀብትን ጨምርበዝርዝሩ ላይ የንብረት አይነትአንድ አካል ይምረጡ ቢትማፕ, አዝራሩን ይጫኑ አስመጣ...እና ቀደም ብለን ከፈጠርነው የ \ ምስሎች ንዑስ ማውጫ BMP ፋይሎችን ይግለጹ። የሚከተለውን ውጤት እናገኛለን (መልክ ለሁለቱም 2012 እና 2015 ፍጹም ተመሳሳይ ነው)

አሁን ለእያንዳንዱ አካልየንብረት ዋጋ መታወቂያማግለል ያስፈልጋል ድርብ ጥቅሶችበእኛ CUI(x) ፋይሎች ውስጥ በተሳካ ሁኔታ ጥቅም ላይ እንዲውሉ፡-

ያ ብቻ ነው፣ አሁን የእኛን DLL ፋይል እናጠናቅቅ (F6 ቁልፍ ወይም በምናሌው በኩል) ግንባታ -> መፍትሔ ፍጠር) .

የጥቅሱ መጨረሻ ተጨማሪ ድርጊቶችDLLs በመጠቀምካስፈለገኝ በኋላ እጽፈዋለሁ።

አሁን አንድ ነገር ከራሴ (እና የራሴ ብቻ ሳይሆን) ተሞክሮ።

ይህ ቴክኖሎጂ ከፊል መላመድ ፋይሎችን ሲጠቀሙ በጣም ጥሩ ይሰራል። እንዲህ ዓይነቱን dll ለድርጅት ማስማማት ፋይል ለመገንባት ከሞከሩ, ያለውን dll መተካት አይችሉም: በመጀመሪያ ሁሉም ተጠቃሚዎች AutoCAD ን ማጥፋት አለባቸው.

dll ስም ከcui(x) ፋይል ስም ጋር መዛመድ አለበት። dll ን ከcui(x) ፋይል አጠገብ ማስቀመጥ በጣም ጥሩ ነው። በንድፈ-ሀሳብ ፣ በቀላሉ በድጋፍ መንገዱ ላይ መጣል ይችላሉ ፣ ግን በግሌ ፣ እንደዚህ አይነት ነገር አላደረኩም - ከዚያ እሱን መፈለግ ትደክማላችሁ።

በ ADN-CIS ፎረም እና በAutodesk እገዛ ላይ ባለው መረጃ መሰረት በገባው ቃል መሰረት ጭብጡን በተመለከተ፡-

  1. ጭብጥ በሌለበት የAutoCAD ስሪቶች ውስጥ ግብዓቶች ከcui(x) ፋይል ጋር ተመሳሳይ ስም ካለው dll ተወስደዋል።
  2. በAutoCAD ከገጽታዎች ጋር፣ ለእያንዳንዱ ጭብጥ የተለየ የDLL ምንጭ መፍጠር አለብህ፡ ቀላል እና ጨለማ። ተዛማጅ ምንጭ DLLበየትኛው ርዕስ ላይ በመመስረት ጥቅም ላይ ይውላል የአሁኑ ጊዜላይ ተተግብሯል የተጠቃሚ በይነገጽ. የዲኤልኤል ፋይሎች የስያሜ ስምምነቶች ልክ እንደ ማበጀት ፋይል ስም ተመሳሳይ ስም እንዲጠቀሙ ይጠይቃል፣ ነገር ግን ቅጥያ ማከል አለብዎት። "_ብርሃን"ለ DLL ፋይል እንደ ብርሃን ገጽታ ጥቅም ላይ ይውላል. ለምሳሌ፣ የተሰየመ የCUix ፋይል ካወረዱ mymenu.cuix, AutoCAD የንብረት ላይብረሪ ፋይልን ይፈልጋል mymenu_light.dll, የብርሃን ገጽታ ጥቅም ላይ ከዋለ እና ፋይሉ mymenu.dll, ጨለማ ጭብጥ ጥቅም ላይ ከዋለ.

የንድፍ ጭብጥ አማራጩን ከግምት ውስጥ በማስገባት የቤተ መፃህፍት ስብስብ ቅደም ተከተል በጥሩ ሁኔታ በዲሚትሪ ዛጎሩልኪን ተገልጿል-

በ 2014-2016 ስሪቶች ላይ ብቻ የCUIX ፋይልን ሠራሁ ፣ ምንም ችግሮች አልነበሩም። እንዲሁም፣ ሁለት የC++ ፕሮጄክቶችን ከንብረት አዶ DLLs ጋር ሰራሁ - አንድ ለጨለማው እቅድ ፣ ሁለተኛው ለብርሃን። በፕሮጀክት ቅንጅቶች ውስጥ "ክስተቶችን ይገንቡ - ክስተቶችን ይገንቡ" ክፍል ውስጥ የተፈጠሩ dll ፋይሎች ወዲያውኑ እንዲገለበጡ ክስተቶችን ማዋቀር ይችላሉ ። አስፈላጊ አቃፊዎችስር ትክክለኛው ስም. ለ 2014 እትም አቃፊ ውስጥ - "ብርሃን" dll ያለ ቅጥያ ብቻ, ለ 2015-2016 ስሪቶች አቃፊ - "ብርሃን" ከቅጥያ "_ብርሃን", "ጨለማ" - ያለ ቅጥያ. መጀመሪያ ላይ ይህን አደረግሁ, ከዚያም ተመሳሳይ ነገር አዋቅሬያለሁ, ነገር ግን በ WIX መጫኛ ፕሮጀክት ውስጥ. በአጠቃላይ, ምንም ያህል ቢያደርጉት, አንድ ጊዜ ማዋቀር ይችላሉ እና ከዚያ በኋላ የት እና ምን ፋይሎች መቅዳት እንዳለባቸው እና ምን መሰየም እንዳለባቸው ማሰብ የለብዎትም - ሁሉም ነገር በራስ-ሰር ይከናወናል.
አውቶካድ የትኛውን DLL እንደሚጫን እንዴት እንደሚወስን:
- እስከ 2014 ድረስ ባሉት ስሪቶች ውስጥ ከ CIUX ፋይል ስም ጋር የሚዛመዱ አዶዎች ያሉት DLL ብቻ ተጭኗል። ለምሳሌ, ፋይል አለ: "MyTools.cuix", የዚህ ፋይል አዶዎች በ "MyTools.dll" ፋይል ውስጥ ይፈለጋሉ.
- በ 2015-2016 ስሪቶች ውስጥ ፣ ለጨለማው እቅድ ፣ CUIX ከሚለው ስም ጋር የሚስማማ DLL ተጭኗል ፣ ለብርሃን እቅድ - “_ብርሃን” የሚል ቅጥያ ያለው ስም። ምሳሌ፡ "MyTools.cuix"፣ የጨለማው እቅድ አዶዎች፡ "MyTools.dll"፣ ለብርሃን እቅድ፡ "MyTools_light.dll"።
ሌላ ግልጽ ያልሆነ ነጥብ. ለ 16x16 እና 32x32 አዶዎች አንድ የ ICO ፋይል መፍጠር ይችላሉ. ይህንን ለማድረግ በ ICO ውስጥ ሁለት ተጓዳኝ ምስሎችን ማስቀመጥ ያስፈልግዎታል. በአዝራር ቅንጅቶች ውስጥ, ለትልቅ እና ትንሽ አዝራሮች ተመሳሳይ የምስል መታወቂያ ይገለጻል. አውቶካድ በውጤቱ ምስል መጠን ላይ በመመስረት አዶን ይመርጣል። ይህ ዘዴ ቁጥሩን በእጅጉ እንዲቀንሱ ያስችልዎታል ICO ፋይሎችበ C ++ የፕሮጀክት ሀብቶች ውስጥ.

አዶ ፋይሎችን ስለመጠቀም ጉዳይ። ሁሉም ነገር እዚህ ቀላል ነው - ጽሑፉን ያንብቡ resource dll ለ CUIx ከግልጽ ራስተሮች ጋር። እውነቱን ለመናገር, እንደዚህ አይነት ነገር እስካሁን አልተጫወትኩም, ግን ዲማ አምናለሁ.
===
ታክሏል፡
አይኮ ፋይሎችን ስለማገናኘት ከጽሑፉ ጥቀስ፡-

በቀላሉ ቪዥዋል ስቱዲዮ አርታዒን በመጠቀም አዲስ የico ግብዓት ያክሉ እና ከታች እንደሚታየው የ"ICO" ሃብት ባህሪያትን በ"RCDATA" ውስጥ ያርትዑ።

በ .EXE ፋይል ውስጥ ሀብቶችን ከማጠራቀም በተጨማሪ የዴልፊ ገንቢ እንዲሁ ሀብቶችን ብቻ የያዘ ተለዋዋጭ ቤተ-መጽሐፍት መፍጠር ይችላል። ይህን እንዴት ማድረግ እንደሚቻል እንይ.

ግብዓቶች መደበኛ ወይም በተጠቃሚ የተገለጹ ሊሆኑ ይችላሉ። በመደበኛ ምንጭ ውስጥ ያለው መረጃ አዶውን ፣ ጠቋሚውን ፣ ምናሌውን ፣ ንግግርን ፣ ቢትማፕን ፣ የተራዘመ ሜታፋይል ፣ ቅርጸ-ቁምፊን ፣ የሙቅ ቁልፍ ሰንጠረዥን ፣ ሕብረቁምፊዎችን እና ሥሪቱን ይገልጻል። ተጠቃሚው ተገልጿልሀብቱ በመተግበሪያው የሚፈለግ ማንኛውንም ውሂብ ሊይዝ ይችላል (ሌላ.EXE፣ GIF፣ MP3፣ ወዘተ)።

ተለዋዋጭ ቤተ-መጻሕፍት ይዘዋል። አጠቃላይ ኮድወይም በብዙ መተግበሪያዎች መካከል ሊጋሩ የሚችሉ ሀብቶች።

ከሃብቶች ጋር DLL መፍጠር

ማድረግ ዲኤልኤልበንብረቶች ብቻ, ባዶ ፕሮጀክት መፍጠር እና ማጠናቀር ያስፈልግዎታል ዲኤልኤል, ወደ የንብረት ፋይል አገናኞችን የያዘ . RES, ይህም የእርስዎን ሀብቶች ይዟል.

ከዚያ የሚከተሉትን ደረጃዎች ይከተሉ።

  1. ፍጠር አር.ሲ.ማስገባት የሚፈልጓቸውን ሀብቶች የሚገልጽ ፋይል ዲኤልኤል. እንደ ምሳሌው: ( adpdll ምንጮች- ስም አር.ሲ.ፋይል አስኪ) - አንድ አይኮንእና አንድ GIFታክሏል አር.ሲ.ፋይል፡-
  2. adpdllresources.rc ስለ አርማ RCDATA ስለlogo.gif ፋብሪካ ICON ፋብሪካ.ICO
  3. ማጠናቀር አር.ሲ.ያስገቡ RESሪሶርስ ማጠናከሪያውን በመጠቀም ፋይል ያድርጉ BRCC32
  4. ባዶ ፕሮጀክት ይፍጠሩ ዲኤልኤል. አስቀምጥ እንደ adpResources.dpr- ከተጠናቀረ በኋላ ዲኤልኤልየሚል ስም ይኖረዋል adpResources.dll. ሙሉ ኮድፕሮጀክት ዲኤልኤልበአንድ ፋይል ውስጥ አራት መስመሮች ብቻ ይኖራቸዋል.
  5. የቤተ-መጽሐፍት adpResources; ($R adpdllresources.RES) መጨረሻ ይጀምራል።
  6. የእርስዎን ያሰባስቡ ዲኤልኤል(አረጋግጥ adpdllresources.resከፕሮጀክቱ ጋር በተመሳሳይ ማውጫ ውስጥ ነው ዲኤልኤል

ልክ እንደ ዲኤልኤልበንብረቶች ይፈጠራሉ, በእራስዎ ውስጥ ሊጠቀሙበት ይችላሉ Delphi መተግበሪያዎች. እባክዎን እነዚህ ሀብቶች ውስጥ እንዳሉ ልብ ይበሉ ዲኤልኤልማንኛውንም መተግበሪያ መጠቀም ይችላል (የግድ Delphi አይደለም)።

ከ DLLs ምንጮችን እንዴት መጠቀም እንደሚቻል

ምንጮችን ለመጠቀም ከ ተለዋዋጭ ቤተ-መጽሐፍት, ማውረድ ብቻ ዲኤልኤልእና ለመጠቀም የሚፈልጉትን ሀብቶች.

እነዚህን ደረጃዎች ይከተሉ:

  1. አዲስ ፍጠር ዴልፊ ፕሮጀክት. በነባሪ፣ ዴልፊ በፕሮጀክቱ ላይ አንድ ቅጽ ያክላል። ፕሮጀክቱን ያስቀምጡ
  2. ቅዳ ዲኤልኤልከሀብቶች ጋር ( adpResources.dllአዲሱ መተግበሪያዎ ወደተቀመጠበት አቃፊ
  3. ሀብቱን ከታች እንደወረደ ያውርዱ...

አዶ እንዴት እንደሚሰቀል ምሳሌ ፋብሪካእና በሸራ ላይ ይሳሉ ቅጽ 1፣ መቼ አዝራር 1: TButton ተጭኗል).

ሂደት TForm1.Button1Click (ላኪ፡ TObject); const resICON = "ፋብሪካ"; var h:Tandle;

አዶ፡ HIcon; ጀምር h: = LoadLibrary ("adpResources.DLL"); GIFይሞክሩት h 0 ከሆነ ከዚያ ይጀምሩ አዶ፡= LoadIcon(h, resICON); GIF DrawIcon (Canvas.Handle, 10, 10, አዶ); ዲኤልኤልመጨረሻ ላይ ShowMessage ጀምር ("የጭነት መገልገያ DLL አልተሳካም!");

መጨረሻ;

በመጨረሻም ፍሪሊብራሪ (ሸ);


አውቶካድ የCUIX ቅርጸትን እንደ ከፊል ሜኑ ፋይሎች ለረጅም ጊዜ ሲጠቀም ቆይቷል፣ ይህም ቅጥያው ከዚፕ ወደ CUIX የተቀየረ መደበኛ ማህደር ነው። ሆኖም ግን, ኩባንያችን ከ CUIX ጋር አብሮ መስራት የማይችል AutoCAD 2009 SP3 ይጠቀማል, ነገር ግን የቆየ ቅርጸት - CUI ፋይሎችን ይጠቀማል, ይዘቶቹ በኤክስኤምኤል ቅርጸት ቀርበዋል.

ስለ አውቶካድ እና ኤምኤስ ቪዥዋል ስቱዲዮ ስሪቶች (ከአጠቃላይ ርእሱ ትንሽ ግንዛቤ)

ለመጻፍ ተቆጣጠረፕለጊን ለ አውቶካድ ፣ ማንኛውንም የ MS Visual Studio ሥሪትን መጠቀም ትችላለህ ፣ይህም የሚተዳደረውን ኮድ ለ NET መድረክ ሥሪት (2.0 ፣ 3.0 ፣ 3.5 ፣ 4.0 ፣ 4.5) የማጠናቀር ችሎታ ያለው በ AutoCAD ሥሪት ውስጥ ጥቅም ላይ ይውላል ። ያስደስተናል። የ.NET Framework ዒላማ ስሪት ተዘርዝሯል። የማዋቀር ፋይል acad.exe.configእና ከተፈለገ እንደገና መመደብ እንችላለን.

ለመጻፍ መቆጣጠር የማይቻልየ ARX ተሰኪዎች ለ AutoCAD 2009 ፣ ማንኛውንም የ MS Visual Studio ስሪት መጠቀም ይችላሉ ፣ ግን ኮምፒዩተሩ እንደዚህ ካለው ብቻ ነው ። የግንባታ መሳሪያዎች ስሪት, ለእርስዎ የAutoCAD ስሪት የሚያስፈልገው እና ​​እነዚህ መሳሪያዎች በእርስዎ IDE ውስጥ ለመጠቀም ይገኛሉ። ለምሳሌ፣ ለAutoCAD 2009 የ ARX ፕለጊን ለመጻፍ፣ በ MS Visual Studio 2005 ውስጥ የሚገኙትን የመሳሪያዎች እትም ያስፈልግሃል። እንደ እውነቱ ከሆነ፣ የፕሮጀክት ቅንጅቶች እስካልተገለጹ ድረስ የተገለጸውን IDE አዳዲስ ስሪቶችን መጠቀም ትችላለህ። አስፈላጊ ስሪትፕሮጀክቱን በሚገነቡበት ጊዜ ጥቅም ላይ መዋል ያለባቸው መሳሪያዎች-


ንብረቶቹ ተቆልቋይ ዝርዝሩን እንዲያደርጉ የመሣሪያ ስርዓት መሣሪያ ስብስብእንዲመርጡ የሚያስችልዎ የንጥረ ነገሮች ስብስብ ነበር። የሚፈለገው ስሪትመሳሪያዎች, እነዚህ መሳሪያዎች አስቀድመው መጫን አለባቸው. እነዚያ። ለግንባታ ሊጠቀሙባቸው የሚፈልጓቸው ሁሉም የ MS Visual Studio ስሪቶች በኮምፒተርዎ ላይ መጫን አለባቸው።በዚህ አጋጣሚ ጥቅሞቹን እና ምቾቶቹን በመጠቀም በአዲሱ አይዲኢ ውስጥ በትክክል እየሰሩ ነው እና ከትዕይንቱ በስተጀርባ ኮዱ በፕሮጀክት ቅንጅቶችዎ ውስጥ በገለጹት ስሪት መሳሪያዎች ይጠናቀቃል ።

የ MS Visual Studio ስሪቶች መጫን አለባቸው በቅደም ተከተል ፣ ከተጨማሪ ጀምሮ የድሮ ስሪትእና በአዲሱ ያበቃልየተለያዩ ግጭቶችን ለማስወገድ. የሚቀጥለውን የ IDE ስሪት ከጫኑ በኋላ የዝማኔ ፓኬጆቹን መጫንዎን አይርሱ።

በነባሪ፣ MS Visual Studio 2012 “ያያል” እና በPlatform Toolset ተቆልቋይ ዝርዝር ውስጥ ከVS 2012፣ 2010 እና 2008 ያሉ መሳሪያዎችን ብቻ ያሳያል። የቆዩ የ IDE ስሪቶች በዝርዝሩ ውስጥ እንዲታዩ ማስኬድ አለቦት። ማንኛውም (እነዚያ። አንዱ) ከሚከተሉት ድርጊቶች፡-

  • በኦወን ዌንጋርድ ጨዋነት የMSI ጥቅልን ጫን።
  • እንደተጠቆመው በእጅ ማዋቀርን ያከናውኑ።
ቢሆንም, ሲመጣ DLL መፍጠርየንብረት ፋይል, ከዚያ ሁሉም ነገር በጣም ቀላል ነው: ፋይሉን አንድ ጊዜ ያጠናቅቁ (ማንኛውም የመሳሪያውን ስሪት በመጠቀም), በተለቀቀው Win32 ውቅር, እና ከዚያ በ x86 x64 መድረኮች ላይ ይጠቀሙ ( x86 DLL ን ሰብስቤ እና በተመሳሳይ ጊዜ ዊንዶውስ 7 x64 የእኔ CUI ፋይል በተሳካ ሁኔታ ምስሎችን ከእሱ አውጥቷል)።
የንብረት DLL ፋይል መፍጠር

በኤምኤስ ቪዥዋል ስቱዲዮ 2012 በባዶ ፕሮጄክት አብነት ላይ በመመስረት አዲስ ፕሮጀክት ይፍጠሩ እና የሚፈለገውን ስም ይሰይሙ።


በመጀመሪያ ፣ ወዲያውኑ አወቃቀሩን በመልቀቅ Win32 ውስጥ እንጭናለን-

አሁን በመስኮቱ ውስጥ መፍትሔ አሳሽበፕሮጀክቱ ስም ላይ በቀኝ ጠቅ ያድርጉ እና በሚታየው አውድ ምናሌ ውስጥ ያለውን ንጥል ይምረጡ ንብረቶች. አስፈላጊዎቹን እሴቶች ለንብረቶች መመደብ የዒላማ ማራዘሚያእና የማዋቀር አይነት:



ምንም እንኳን የዲኤልኤል ፋይሉ በAutoCAD 2009 ውስጥ ጥቅም ላይ ለሚውለው CUI የተሰራ ቢሆንም በንብረቱ ውስጥ የመሣሪያ ስርዓት መሣሪያ ስብስብስሪት ተገልጿል v110, ከ Visual Studio 2012 ጋር የሚዛመድ, አይደለም v80(Visual Studio 2005 tools)፣ ለዚህ ​​የAutoCAD ስሪት የ ARX ፕለጊኖችን ለማጠናቀር አስፈላጊ ነው።


በተጨማሪም ፣ በፕሮጀክቱ ቅንብሮች ውስጥ አንድ ተጨማሪ አማራጭ መለወጥ ያስፈልግዎታል - የመግቢያ ነጥብ የለም።:


ከላይ የተጠቀሱትን ለውጦች ካደረጉ በኋላ ቁልፉን ይጫኑ ያመልክቱእና እሺ. አሁን ባዶ ፕሮጄክታችን ባህሪያት በትክክል ተዋቅረዋል። በትሩ ላይ መፍትሔ አሳሽ, ከፕሮጀክት አውድ ምናሌ ውስጥ ንጥሉን ይምረጡ አክል -> አዲስ ንጥል... እና በሚታየው የንግግር ሳጥን ውስጥ የንብረት ፋይል አብነት ይምረጡ፡-



ለፋይሉ ማንኛውንም ስም መመደብ ይችላሉ, በእኛ ምሳሌ ውስጥ እንተዋለን resource.rc. አዝራሩን ተጫን አክል. ያከልነው ፋይል በእኛ CUI ፋይሎች ውስጥ ጥቅም ላይ የሚውሉ የምስሎች ዝርዝር ይይዛል።

አሁን በእኛ የፕሮጀክት ማውጫ ውስጥ ወደ ዲኤልኤል ፋይሉ ለመጨመር የምንፈልጋቸውን ሁሉንም የምስል ፋይሎች የምንቀዳበት ንዑስ ማውጫን በእጅ እንፈጥራለን። የንዑስ ማውጫው ስም የዘፈቀደ ሊሆን ይችላል፣ እንጥራው። ምስሎች. በትሩ ላይ መፍትሔ አሳሽከፕሮጀክት አውድ ምናሌ ውስጥ ንጥሉን ይምረጡ በፋይል ኤክስፕሎረር ውስጥ አቃፊን ክፈት:



በሚከፈተው ኤክስፕሎረር መስኮት ውስጥ ንዑስ ማውጫ ይፍጠሩ ምስሎችእና የሚፈልጉትን ሁሉንም BMP ፋይሎች ወደ እሱ ይቅዱ።

እንደ ሙከራ, የተለያየ መጠን ያላቸውን BMP ፋይሎችን እንጨምር: 16x16, 24x24, 32x32, 48x48, 64x64 እና 128x128. በመሳሪያ ቤተ-ስዕል ላይ ያሉ አዝራሮች 16x16 ምስሎችን መያዝ አለባቸው, በ Ribbon ቤተ-ስዕሎች ላይ የተቀመጡ አዝራሮች ግን ትልቅ ናቸው. በሙከራ CUI ፋይላችን ውስጥ የተለያዩ መጠኖችን የመጠቀምን ውጤት ለማየት ከላይ ያሉትን ጥራቶች እዚህም እዚያም እናስቀምጣለን።

ፋይሎችን በPNG ቅርጸት መቅዳት ይቻል ነበር፣ ነገር ግን AutoCAD 2009 የዚህን ቅርጸት ምስሎች በCUI ፋይሎች መጠቀም አይችልም። አሁን ወደ እኛ አይዲኢ እንመለስ፡ p ወደ ትሩ ይቀይሩየንብረት እይታ.



ከኤለመንት አውድ ምናሌ resource.rcእቃውን ይደውሉ ሀብትን ጨምር...


በንግግር ሳጥን ውስጥ ሀብትን ጨምርበዝርዝሩ ላይ የንብረት አይነትአንድ አካል ይምረጡ ቢትማፕ, አዝራሩን ይጫኑ አስመጣ... እና ቀደም ብለን ከፈጠርነው ንዑስ ማውጫ የ BMP ፋይሎችን ይግለጹ ምስሎች. የሚከተለውን ውጤት እናገኛለን:


አሁን ለሁሉምየንብረቱ ንብረት ዋጋ መታወቂያበእኛ CUI ፋይሎች ውስጥ በተሳካ ሁኔታ ጥቅም ላይ እንዲውሉ በድርብ ጥቅሶች መለየት አለባቸው፡


ያ ነው፣ አሁን የእኛን DLL ፋይል እናጠናቅቅ፡


በተቀነባበረው ውጤት ላይ የቀረበውን ዘገባ እንመልከት፡-


እና ለረጅም ጊዜ ሲጠበቅ የነበረው DLL እዚህ አለ፡-

የተገኘውን DLL ፋይል የእኛ CUI ፋይል ወደ ሚከማችበት ተመሳሳይ ማውጫ ገልብጠን ተመሳሳይ ስሞችን እንመደብላቸዋለን። ፈተና.cuiእና ፈተና.dll. አሁን በCUI ፋይል ውስጥ የእኛን የዲኤልኤል ፋይል እንደ BMP አዶዎች ምንጭ በመጠቀም ለ CUI ፋይላችን ትዕዛዞችን መስጠት ይችላሉ (ንብረቶቹን ይመልከቱ) ትንሽ ምስልእና ትልቅ ምስል) ከዚያም የንብረት ዋጋ መታወቂያከዚህ ቀደም በድርብ ጥቅሶች ተለያይቷል፡-


በንብረቱ ውስጥ የተገለጹ አዶዎች ትንሽ ምስልበ palettes ላይ ጥቅም ላይ ይውላል የመሳሪያ አሞሌ, እና ለ የተጠቆሙት ትልቅ ምስል -ውስጥ ጥቅም ላይ ይውላል ሪባን.

እባክዎን በእኛ ፓነል ላይ ያስተውሉ አንዳንድ የመሳሪያ አሞሌሁሉም ይታያሉ BMP ምስሎችከመጨረሻው በስተቀር - መጠኑ 128x128 የነበረው.

dll ፋይል በመፍጠር ላይ

በጣም ብዙ ጊዜ በስራዎ ውስጥ, እንደዚህ አይነት ሁኔታ ያጋጥሙዎታል.

አንድ ተግባር አጋጥሞዎታል, ፕሮግራም መጻፍ ያስፈልግዎታል " ልዕለ ማስታወሻ ደብተር"ሁሉንም ተግባራት ማቆየት ያለበት መደበኛ ማስታወሻ ደብተር, ግን በተመሳሳይ ጊዜ በርካታ ተጨማሪ ተግባራት አሏቸው, ለዚህም ምስጋና ይግባውና ከጽሑፍ ጋር ለመስራት ፕሮግራም በሚመርጡበት ጊዜ ተጠቃሚው ለፕሮግራምዎ ምርጫ ይሰጣል. ይህንን ለማድረግ ብዙ አዳዲስ ተግባራትን ለመጨመር ተወስኗል, ከመካከላቸው አንዱ በጽሑፉ ውስጥ ያሉትን የቃላት ብዛት ለመቁጠር እና ለማሳየት ሃላፊነት አለበት.

ከጥቂት ሳምንታት በኋላ ፕሮግራሙ ተጻፈ, ከዚያም በይነመረቡን መጣ, ተጠቃሚዎች አደነቁ አዲስ ምርትእና መጠቀም ጀመረ. ግቡ ተሳክቷል።

ጊዜው ያልፋል እና አዲስ ተግባር ይሰጥዎታል, ፕሮግራም ለመጻፍ " ልዕለ ተንታኝ"የዚህ ፕሮግራም አንዱ ተግባር ቃላትን በጽሁፉ ውስጥ መቁጠር ይሆናል. እንደገና ቃላትን የሚቆጥር ዘዴ ማዘጋጀት እንዳለብዎት ይገባዎታል. ግን በተመሳሳይ ጊዜ, ብዙም ሳይቆይ አንድ ፕሮግራም እንደፈጠሩ ያስታውሳሉ. በየትኛው ውስጥ ይህ ተግባር. መንኮራኩሩን እንደገና ላለመፍጠር የፕሮግራሙን ምንጭ ኮድ ይከፍታሉ" ልዕለ ማስታወሻ ደብተር"; እና ሙሉውን ዘዴ ወደ አዲሱ ፕሮግራም ምንጭ ኮድ ይቅዱ" ልዕለ ተንታኝ"በጣም ጥሩ, አሁን ይህን ዘዴ እንደገና ለመጻፍ ጊዜ ማባከን የለብዎትም, እና ለተቀሩት የፕሮግራሙ ክፍሎች ተጨማሪ ጊዜ መስጠት ይችላሉ. ችግሩ ተፈትቷል.

ግን የቃላት መቁጠር ዘዴ በእርስዎ ካልሆነ ፣ ግን በአንዳንድ የስራ ባልደረባዎ እና በሆነ ምክንያት እርስዎ ማግኘት ካልቻሉስ? ምንጭ ኮድፕሮግራሞች " ልዕለ ማስታወሻ ደብተር". ያም ማለት, የመጀመሪያው አማራጭ, ዘዴውን ከምንጩ መቅዳት, አይሰራም እና ይህ ዘዴእኔ ራሴ መጻፍ አለብኝ ፣ ሚሜ ፣ ሀዘን።

ግን ከዚያ በኋላ የሥራ ባልደረባዎ ይደውልልዎታል እና እንዲህ ይላችኋል: ታውቃላችሁ, ይህን ዘዴ ሳዘጋጅ ትዝ ይለኛል, ምናልባት ሌላ ቦታ ልጠቀምበት እንዳለብኝ አስቤ ነበር, እናም በዚህ ምክንያት በተለየ ጉባኤ ውስጥ ለማስቀመጥ ወሰንኩ. የተለዋዋጭ ቤተ-መጽሐፍት (dll) ፋይል ብቻ ይቅዱ dllወደ ፕሮጄክትዎ እና እንደ ውጫዊ ስብሰባ ያገናኙት ፣ ከዚያ በኋላ የእኔን ዘዴ ማግኘት ይችላሉ እና እሱን መጠቀም ይችላሉ።

በጣም ጥሩ! በፕሮግራሙ ውስጥ ሁሉንም የተገለጹትን ድርጊቶች ያከናውናሉ. ልዕለ ተንታኝ” ይታያል የሚፈለገው ዘዴ, ችግሩ ተፈትቷል እና እንደገና በእጅዎ ኮዱን እንደገና መጻፍ አያስፈልግዎትም.

ይህ አባባል ያበቃል እና አሁን ወደ የበለጠ ዝርዝር ጥናት እንሸጋገራለን.

DLL ምንድን ነው?

ዲኤልኤል(ዳይናሚክ-ሊንክ ላይብረሪ) ተለዋዋጭ አገናኝ ቤተ-መጽሐፍት ነው፣ ወይም ተለዋዋጭ ቤተ-መጽሐፍት በአጭሩ።

ቀደም ብዬ እንደጻፍኩት፣ ተለዋዋጭ ቤተ-መጻሕፍት ከዚህ ቀደም የተጻፈውን ኮድ እንደገና ለመጠቀም ያስችሉዎታል፣ እና እንዲሁም የተሻለ የኮድ ተንቀሳቃሽነት ይሰጣሉ። ፋይሉን ወደ ፍላሽ አንፃፊ ማስተላለፍ በቂ ነው, ወይም dll አውርድከበይነመረቡ ፋይል ያድርጉ ፣ ከዚያ ወደ የአሁኑ ፕሮጀክት ያክሉት እና ወዲያውኑ ለመተግበሪያዎ የተለያዩ ተጨማሪ ተግባራትን ያግኙ። በአንደኛው ውስጥ ማወቅም ጠቃሚ ነው dll ፋይልማንኛውም አይነት፣ አባላት እና የስም ቦታዎች ሊቀመጡ ይችላሉ።

dll ፋይል በመፍጠር ላይ

መጀመሪያ የአዲሱን አይነት እንመርጥ መተግበሪያ እየተፈጠረ ነው።, ወይም ይልቁንም ፕሮጀክቱ.

ይምረጡ ክፍል ቤተ መጻሕፍት፣ ማለትም ፣ ተለዋዋጭ ቤተ-መጽሐፍት (dll) ፋይል እንፈጥራለን

እንዲሁም ይህ ፕሮጀክት ለየትኛው የማዕቀፍ ስሪት እንደሚፈጠር መግለጽ ይችላሉ።

ቪዥዋል ስቱዲዮ የፕሮጀክቱን አጽም ከፈጠረ በኋላ የሚከተለውን ታያለህ፡-

የመፍትሄው አሳሽ መስኮት ይህን ይመስላል

እና ይህ ምን እንደሚመስል ነው የስራ አካባቢ, አብዛኛውን ጊዜ የፕሮግራም ኮድ የሚጽፉበት

እናም የስም ቦታው ተሰጥቷል፡ መኪና እና ክፍል፡ ክፍል 1። ክፍል 1 ጥሩ ስም አይደለም፣ 1ኛ ክፍልን በቢኤምደብሊው በመተካት ኮዳችንን ትንሽ እንለውጥና የክፍላችንን ስም የሚታተም ዘዴ እንጨምር።

እና ስለዚህ ኮዱ ተጽፏል, እና አሁን ስብሰባውን ለማግኘት ማጠናቀር አስፈላጊ ነው.
አሁን F5 ወይም Ctrl+F5 ን ለመጫን ከሞከሩ ይህን መስኮት ያያሉ።


ይህ ስህተት የሚያመለክተው ተለዋዋጭ የቤተ-መጽሐፍት ፋይል መፈጠሩን ብቻ ነው ( dllሊሰራ የማይችል ፋይል (executable) ሳይሆን።

ፕሮጀክቱን ለማጠናቀር የ F6 ቁልፉን ይጫኑ, ከዚያ በኋላ የCar.dll ፋይል በቢን\ ማረም ማውጫ ውስጥ ይታያል.

የቤተ መፃህፍቱ ፋይል መፈጠሩን ለማረጋገጥ አዝራሩን ይጠቀሙ ሁሉንም ፋይሎች አሳይበ Solution Explorer ትር ላይ

ስብሰባው, በተለዋዋጭ የቤተ-መጽሐፍት ፋይል መልክ, በተሳካ ሁኔታ ተፈጥሯል.

አሁን ወደ ቢን አራሚ አቃፊ እንሂድ፣ በፍጥነት ወደ የአሁኑ የፕሮጀክት ማውጫ ለመሄድ፣ በተመሳሳይ Solution Explorer ውስጥ ንጥሉን ይጠቀሙ። በዊንዶውስ ኤክስፕሎረር ውስጥ አቃፊን ክፈት

የተገኘውን የመሰብሰቢያ ፋይል (በእኛ ሁኔታ ይህ የCar.dll ፋይል ነው) ወደ አንዳንድ ጊዜያዊ አቃፊ ይቅዱ። እንደ እውነቱ ከሆነ, ይህን ማድረግ አስፈላጊ አይደለም, መተው ይችላሉ ይህ ፋይልበዚህ አቃፊ ውስጥ, ግን ለመመቻቸት, እንፍጠር አዲስ አቃፊ, እና የተፈጠረውን የቤተ-መጽሐፍት ፋይል እዚያ ያስቀምጡ.

ከዚያም አሁን ያለውን ፕሮጀክት እንዘጋለን እና አዲስ እንፈጥራለን. ነገር ግን, በዚህ ጊዜ የፕሮጀክቱን አይነት - የኮንሶል አፕሊኬሽን እንመርጣለን.

አዲስ ፕሮጀክት እንፍጠር።

አዲስ ፕሮጀክት ተፈጥሯል። አሁን የእኛን ቤተ-መጽሐፍት (Car.dll) ከአሁኑ ፕሮጀክት ጋር እናገናኘው።

dll በማገናኘት ላይ

ይህንን በአቃፊው ላይ ለማድረግ ዋቢዎችበ ሶሉሽን ኤክስፕሎረር መስኮት ውስጥ በቀኝ ጠቅ ማድረግ እና ማጣቀሻን አክል የሚለውን መምረጥ ያስፈልግዎታል ፣ ይህ መስኮት ይከፈታል ።

  1. የአሰሳ ትርን ይምረጡ
  2. የተፈጠረው የቤተ-መጽሐፍት ፋይል የሚገኝበትን አቃፊ ይግለጹ (በእኛ ምሳሌ - Car.dll)
  3. ፋይል ይምረጡ አስፈላጊው ቤተ-መጽሐፍትእና አዝራሩን ይጫኑ እሺ;
ሁሉም ነገር በትክክል ከተሰራ, የሚከተለውን ምስል ያያሉ

የእኛን IL ኮድ የሚያከማች የCar.dll መገጣጠሚያችን አገናኝ በተሳካ ሁኔታ ወደ አሁን ፕሮጀክታችን መጨመሩን ያሳያል። ከተጠናቀረ በኋላ ሁሉም የሚጽፉት ኮድ በ IL (CIL, MSIL - ይህ ተመሳሳይ ነገር ነው) ወደ መካከለኛ ኮድ እንደሚቀየር እንደምታስታውሱ ተስፋ አደርጋለሁ. እንዲሁም የእኛ ቤተ-መጽሐፍት ቅጂ በቢን\ ማረም አቃፊ ውስጥ መቀመጡን ማየት ይችላሉ።

በድንገት ምን የስም ቦታ፣ አይነቶች ወይም አባላት የፈጠሩት ቤተ-መጽሐፍትዎ እንደያዘ ከረሱ። ሁልጊዜም እንደ ቪዥዋል ስቱዲዮ መሳሪያ መጠቀም ትችላለህ የነገር አሳሽ. ይህንን ለማድረግ ወደ መፍትሄ ኤክስፕሎረር ትር ይሂዱ ፣ የማጣቀሻ ማህደሩን ይክፈቱ እና ቀደም ሲል ያከሉትን ቤተ-መጽሐፍት በቀላሉ በቀኝ ጠቅ ያድርጉ ፣ በእኛ ሁኔታ እኔ አስታውሳችኋለሁ - ይህ ፋይል ነው (Car.dll) እና ይምረጡ በነገር አሳሽ ውስጥ ይመልከቱ, እንደዚህ ያለ መስኮት ይታያል.

በነገር አሳሽ መስኮት ውስጥ የስብሰባችንን ይዘቶች ማየት ይችላሉ።

ስብሰባው ተገናኝቷል እና አሁን ከይዘቱ ጋር መስራት ይችላሉ. በመቀጠል የአማራጭ ደረጃውን እናጠናቅቅ.

በመጠቀም እንጨምር ቁልፍ ቃልከፈጠርነው የCar.dll ቤተ-መጽሐፍት የመኪና ስም ቦታን በመጠቀም፣ከዚያ በኋላ የ BMW ክፍል የሆነ ነገር እንፈጥራለን እና የውጤት_ክፍል_ስም() ዘዴን እንፈጽማለን።

ውጤት፡

ሁሉም ነገር ይሰራል።

እና እንደገና በቅደም ተከተል:

  1. ተለዋዋጭ ቤተ-መጽሐፍት (dll) ፋይል ይፍጠሩ
  2. በማገናኘት ላይ cos ይህ ቤተ-መጽሐፍትወደ ዲኤል ፋይላችን ወደ ማመሳከሪያ አቃፊው አገናኝ በማከል ወደ ፕሮጄክታችን።
  3. (አማራጭ) የስም ቦታውን ከተገናኘው ስብሰባ ቁልፍ ቃሉን በመጠቀም እናገናኘዋለን ወይም ሙሉ ስሙን ማለትም የስም ቦታን እንጠቀማለን ዓይነት (Car.BMW)።
  4. ትርፍ
እነዚህ አራት ደረጃዎች ይረዱዎታል መፍጠር dll ቤተ-መጽሐፍት እና ከፕሮጀክትዎ ጋር ያገናኙት።

እና በመጨረሻ ስለ ስብሰባ ዓይነቶች ብዙ መረጃ የለም-

ስብሰባዎች በሚከተሉት ዋና ዋና ዓይነቶች ይመጣሉ: አጠቃላይ እና የግል.

የግል ስብሰባ

እነዚህ እንደ ቀደም ሲል እንደተፈጠርነው የCar.dll ፋይል፣ በማውጫው ውስጥ በሙሉ ጊዜ ውስጥ የሚገኙ የቤተ-መጻህፍት ፋይሎች ናቸው። የአሁኑ መተግበሪያወይም የትኛውም ንዑስ ማውጫዎቹ።

ወደ ጽሁፉ መጀመሪያ እንመለስ።

የ "Super Parser" መተግበሪያ ከተፈጠረ በኋላ, ስብሰባውን በፋይል (exe) መልክ ተቀብለናል. ከዚያም ፕሮግራማችንን ፈትነን ለጓደኛችን ለመስጠት ወሰንን, እና እሱ እንዲኖረን ከፈለገም ጠቅሰዋል ተጨማሪ ባህሪያትበፕሮግራሙ ውስጥ, ከዚያም ከእሱ ቀጥሎ ብቻ ያስፈልገዋል exe ፋይልየCar.dll ቤተ-መጽሐፍት ፋይልን ያስቀምጡ። ከዚያ በኋላ በጽሑፉ ውስጥ ቃላትን መቁጠር ይችላል. ያም ማለት ቤተ መፃህፍቱ የሚፈፀመው ፋይል ባለበት ማውጫ ውስጥ ይከማቻል።

የጋራ ስብሰባ

እነዚህ ለብዙ አገልግሎት የታቀዱ ስብሰባዎች ናቸው። የተለያዩ መተግበሪያዎችበአንድ ኮምፒውተር ላይ ተጭኗል።

ለምሳሌ, ሁለት ፕሮግራሞች አሉን. የኛ የCar.dll ፋይል የትኛውን ይጠቀማል፣ ይህንን ፋይል ወደ እያንዳንዱ ፎልደር ላለመቅዳት፣ ልዩ ቦታ ግሎባል መሰብሰቢያ መሸጎጫ - (GAC) ወይም ግሎባል ስብሰባ መሸጎጫ ውስጥ እናስቀምጠው። አሁን ስብሰባው በአንድ ልዩ ቦታ ውስጥ ይከማቻል, እና የእርስዎ ፕሮግራሞች ሁልጊዜ ይህን ኮድ ቤተ-መጽሐፍት የት እንደሚያገኙ ያውቃሉ. የግላዊ ዘዴውን ከተጠቀምን ቤተ መጻሕፍቶቻችንን በእያንዳንዱ የመተግበሪያው ፎልደር ውስጥ ማስቀመጥ አለብን።

ሀብቶችን ብቻ የያዘ ዲኤልኤል መፍጠር

የንብረት ፋይሉ መጠቅለል አለበት - "rc MyResDll.rc" - እና በአገናኝ ወደ DLL መቀየር አለበት፣ የ"/NOENTRY" ባንዲራ መግለፅዎን እርግጠኛ ይሁኑ። አገናኝ MyRedDll.res /DLL / NOENTRY".

በቪዥዋል ስቱዲዮ ውስጥ ይህን ማድረግ የበለጠ ቀላል ነው - በ "መስኮት" ውስጥ ያለውን "ሀብቶች" አቃፊ ላይ ጠቅ ያድርጉ. የፋይል እይታ" እና ጨምር አዲስ ፋይልመርጃ, ከዚያም ሊስተካከል ይችላል ምስላዊ አርታዒበራስህ ምርጫ።

ከዲኤልኤል ሃብትን ለመጫን በመርህ ደረጃ ለእኛ የምናውቀውን LoadLibray ተግባር መጠቀም እና LoadString ገላጭ በእሱ የተመለሰውን ወይም ከሃብቶች ጋር የሚሰራ ሌላ ተግባር ማለፍ ይችላሉ። ነገር ግን ይህ DLL ከሃብቶች በስተቀር ምንም ነገር እንደሌለው ለስርዓቱ "ከገለፅንለት" ተለዋዋጭ ቤተ-መጽሐፍት መጫን በከፍተኛ ሁኔታ ሊፋጠን ይችላል, እና በሂደቱ የአድራሻ ቦታ ላይ ፕሮጀክት ማድረግ ብቻ ያስፈልገናል, እና ሁሉንም ነገር እራሳችንን መንከባከብ እንችላለን. .

የLoadLibraryEx ተግባር ጠቃሚ የሆነው እዚህ ላይ ነው፡የመጀመሪያው መከራከሪያ ልክ እንደ ባልደረባው LoadLibrary ሁሉ የሚጫነው ተለዋዋጭ ላይብረሪ ስም ይገልጻል፣ሁለተኛው የተያዘ ነው እና መሆን አለበት። ከዜሮ ጋር እኩል ነው።, እና ሦስተኛው, ከ LOAD_LIBRARY_AS_DATAFILE ጋር እኩል ነው, ተግባሩ በትክክል የምንፈልገውን እንዲያደርግ ያስገድደዋል - DLL ን እንደ ዳታቤዝ ይጫኑ (ተለዋዋጭ ቤተ-ፍርግም ከሃብቶች በተጨማሪ ኮድ ከያዘ, በዚህ ቁልፍ መጫን አሁንም ስኬታማ ነው, ነገር ግን የተጫነው DLL ተግባራት አይገኙም - ሀብቶች ብቻ)

#ያካትቱ

#ያካትቱ

h=LoadLibraryEx("MyResDll.dll"፣0፣

LOAD_LIBRARY_AS_DATAFILE);

LoadString(h,1,&buf,99);

printf("%s\n",&buf);

ከሀብቶች በስተቀር ምንም ያልያዘ የተመቻቸ የDLL ጭነት ማሳያ

ይህ ፕሮግራም ልክ እንደ ቀደሙት ግልጽ የማገናኘት ምሳሌዎች በተመሳሳይ መንገድ ያጠናቅራል - እና ሲሮጥ, በድል አድራጊነት "ሄሎ, ቃል!" ከተለዋዋጭ አገናኝ ቤተ-መጽሐፍት የተገኘው "ሕብረቁምፊ" ምንጭ በተሳካ ሁኔታ መጫኑን ያረጋግጣል! በተመሳሳይ መንገድ, ከ መርጃዎችን ማውረድ ይችላሉ ሊተገበሩ የሚችሉ ፋይሎች; ከዚህ አንፃር ከተለዋዋጭ ቤተ-መጻሕፍት የተለዩ አይደሉም.

OOP እና DLL

"stdafx.h"ን ​​ጨምሮ

DWORD ul_ምክንያት_የጥሪ፣

LPVOID lpየተጠበቀ

//የእኛ ኮድ.

// የመደመር ተግባርን ጨምር።

ከሆነ(a>b) res = a; ሌላ res = b;

ጌታው የእኛን dll አብነት አደረገን። እናለማዋለን። ይህንን ለማድረግ 1 ተግባር እና አንድ ክፍል ከአንድ ዘዴ ጋር ይጨምሩ. ቁጥሩ ይኸውና፡-

"stdafx.h"ን ​​ጨምሮ

BOOL APIENTRY DllMain(HANDLE hModule፣

DWORD ul_ምክንያት_የጥሪ፣

LPVOID lpየተጠበቀ

//የእኛ ኮድ.

// የመደመር ተግባርን ጨምር።

Declspec(dllexport) int Add(int a, int b)

//MyClass ክፍልን በMyMax ዘዴ ያክሉ።

Declspec (dllexport) int MyMax (int a, int b)(

ከሆነ(a>b) res = a; ሌላ res = b;

እባክዎን ወደ ውጭ ለመጥራት የምንፈልጋቸውን ተግባራት እና ዘዴዎችን ሲጨምሩ በ__declspec(dllexport) መቀየሪያ እንደሚጽፏቸው ልብ ይበሉ። በዚህ መንገድ ወደ ውጭ የተላኩ ተግባራት የሚባሉትን ምልክት እናደርጋለን.

ፕሮግራሙን እናጠናቅቅ። የ firstdll.dll ፋይል በፕሮጀክቱ ማረም አቃፊ ውስጥ መታየት አለበት።

አሁን የሙከራ ፕሮግራም እንጽፋለን.

#ያካትቱ

//የሚፈለገውን የራስጌ ፋይል ያካትቱ።

"..\firstdll.cpp"ን ጨምሮ

ኮት<

ኮት<

ፕሮግራሙን እንጀምር። እርስዎ እንደሚጠብቁት፣ 22 እና 11 ያትማል።

DllMain ተግባር

አብዛኛዎቹ DLLዎች በቀላሉ ወደ ውጭ የሚላኩ እና በመተግበሪያዎች የሚጠቀሙባቸው በመሠረቱ ነጻ የሆኑ ተግባራት ስብስቦች ናቸው። ወደ ውጭ ለመላክ የታቀዱ ተግባራት በተጨማሪ፣ እያንዳንዱ DLL የ DllMain ተግባር አለው። ይህ ተግባር ዲኤልኤልን ለመጀመር እና ለማጽዳት የተነደፈ ነው። በቀደሙት የዊንዶውስ ስሪቶች ውስጥ የሚገኙትን የ LibMain እና WEP ባህሪያትን ይተካል። በጣም ቀላሉ የ DllMain ተግባር አወቃቀር ይህን ይመስላል።

BOOL WINAPI DllMain (HANDLE hInst፣DWORD dwReason፣ LPVOID IpReserved)

BOOL bAllWentWell=TRUE;

መቀየር (dwReason) (

መያዣ DLL_PROCESS_ATTACH: // የሂደት ማስጀመር።

መያዣ DLL_THREAD_ATTACH: // ክርውን ያስጀምሩት።

መያዣ DLL_THREAD_DETACH: // የክር መዋቅሮችን አጽዳ።

መያዣ DLL_PROCESS_DETACH: // የሂደት መዋቅሮችን ማጽዳት.

(bAllWentWell) ከተመለሰ TRUE;

ሌላ ውሸት መመለስ;

የDllMain ተግባር በብዙ አጋጣሚዎች ይጠራል። የመጥራት ምክንያት የሚወሰነው በ dwReason መለኪያ ነው, ይህም ከሚከተሉት እሴቶች ውስጥ አንዱን ሊወስድ ይችላል.

ሂደቱ ለመጀመሪያ ጊዜ DLL ሲጭን የDllMain ተግባር ከDLL_PROCESS_ATTACH ጋር እኩል በሆነ dwReason ይባላል። አንድ ሂደት አዲስ ክር በፈጠረ ቁጥር DllMain ከ DLL_THREAD_ATTACH ጋር እኩል ይባላል (ከመጀመሪያው ክር በስተቀር፣ ምክንያቱም በዚህ አጋጣሚ dwReason ከ DLL_PROCESS_ATTACH ጋር እኩል ነው)።

ሂደቱ ከዲኤልኤል ጋር መስራቱን ሲያጠናቅቅ የDllMain ተግባር ከDLL_PROCESS_DETACH ጋር እኩል በሆነ dwReason መለኪያ ይባላል። ክር ሲጠፋ (ከመጀመሪያው በስተቀር) dwReason ከ DLL_THREAD_DETACH ጋር እኩል ይሆናል።

DLL የሚፈልጓቸው ሂደቶች እና ክሮች የማስጀመር እና የማጽዳት ስራዎች በሙሉ በ dwReason እሴት ላይ ተመስርተው መከናወን አለባቸው፣ ባለፈው ምሳሌ ላይ እንደሚታየው። የሂደቱ አጀማመር በተለምዶ እንደ የተጋሩ ፋይሎችን መጫን እና ቤተ-መጻሕፍትን ማስጀመር ባሉ ክሮች መካከል የተጋሩ ሀብቶችን ለመመደብ ብቻ የተገደበ ነው። የክር አጀማመር ለአንድ የተወሰነ ክር ብቻ የተወሰኑ ሁነታዎችን ለማዋቀር ይጠቅማል፣ ለምሳሌ፣ የአካባቢ ማህደረ ትውስታን ለማስጀመር።

DLL በሚጠራው መተግበሪያ ያልተያዙ ንብረቶችን ሊይዝ ይችላል። የዲኤልኤል ተግባራት በዲኤልኤል ሃብቶች ላይ የሚሰሩ ከሆነ የ hInst መያዣን ከመንገድ ውጭ ማከማቸት እና ከዲኤልኤል ምንጮችን ሲጫኑ መጠቀም ጠቃሚ ይሆናል። የ IpReserved ጠቋሚው ለውስጣዊ የዊንዶውስ አጠቃቀም ተጠብቋል። ስለዚህ, ማመልከቻው ይገባኛል ማለት የለበትም. ትርጉሙን ብቻ ነው ማረጋገጥ የምትችለው። ዲኤልኤል በተለዋዋጭነት ከተጫነ NULL ይሆናል። በስታቲስቲክስ ሲጫኑ ይህ ጠቋሚ ዜሮ አይሆንም።

ከተሳካ፣ የDllMain ተግባር TRUE መመለስ አለበት። ስህተት ከተፈጠረ፣ FALSE ይመለሳል እና ተጨማሪ እርምጃዎች ይቋረጣሉ።

አስተያየት። የእራስዎን DllMain() ተግባር ካልፃፉ፣ አቀናባሪው መደበኛውን ስሪት ይጠቀማል፣ ይህም በቀላሉ TRUEን ይመልሳል።

ችግር ምሳሌ፡-

HANDLE hThread; DWORD dwThreadId;

መቀየር(fdwምክንያት)

መያዣ DLL_PROCESS_ATTACH፡

// DLL በሂደቱ የአድራሻ ቦታ ላይ ተቀርጿል

// አንዳንድ ስራዎችን ለመስራት ክር ይፍጠሩ

hThread = CreateThread (NULL, 0, SomeFunction, NULL, 0, &dwThreadId);

// አዲሱ ክር እስኪያልቅ ድረስ የእኛን ክር ያዘገዩ

WaitForSingleObject(hThread፣ INFINITE);

// ወደ አዲሱ ክር መድረስ ከአሁን በኋላ አያስፈልግም

ዝጋ ሃንድል (hThread);

ጉዳይ DLL_THREAD_ATTACH፡

// ሌላ ክር ይፈጠራል

ጉዳይ DLL_THREAD_DETACH፡

// ክር በትክክል ያበቃል

መያዣ DLL_PROCESS_DETACH፡

// DLL ከሂደቱ የአድራሻ ቦታ ይወርዳል

የመግቢያ ነጥብ ተግባራት ቀላል የመነሻ ስራዎችን ብቻ ማከናወን አለባቸው. LoadLibrary ወይም LoadLibraryEx ተግባርን (ወይም እነዚህን ተግባራት የሚጠራ ተግባር) መጥራት የለባቸውም ምክንያቱም ይህ በዲኤልኤል ሎድ ቅደም ተከተል ውስጥ የጥገኝነት ዑደቶችን ሊፈጥር ይችላል። ይህ ስርዓቱ የማስጀመሪያውን ኮድ ከመፈጸሙ በፊት ዲኤልኤል ጥቅም ላይ መዋሉ ምክንያት ሊሆን ይችላል። እንደዚሁም የመግቢያ ነጥብ ተግባር የፍሪላይብራሪ ተግባርን (ወይም የሚጠራውን ተግባር) መጥራት የለበትም ምክንያቱም ይህ ስርዓቱ የመውጫ ኮዱን ከፈጸመ በኋላ DLL ስራ ላይ ሊውል ይችላል.

ምሳሌ ከ Microsoft. ደረጃ በደረጃ መመሪያ. DLL (C++) ቪዥዋል ስቱዲዮ መፍጠር እና መጠቀም 2013

ይህ የእግር ጉዞ ከC++ መተግበሪያ ጋር ለመጠቀም ተለዋዋጭ አገናኝ ላይብረሪ (ዲኤልኤል) እንዴት መፍጠር እንደሚቻል ይገልጻል። ኮድን እንደገና ለመጠቀም ቤተ-መጽሐፍት መጠቀም ጥሩ መንገድ ነው። በእያንዳንዱ ፕሮግራም ውስጥ ተመሳሳይ ሂደቶችን እንደገና ከመተግበር ይልቅ አንድ ጊዜ ይፍጠሩ እና ከዚያ ከሌሎች መተግበሪያዎች ይጠቅሷቸዋል። ኮዱን በዲኤልኤል ውስጥ በማስቀመጥ ኮዱን በሚጠቅስ በእያንዳንዱ መተግበሪያ ውስጥ ቦታ ይቆጥባሉ እና ሁሉንም አፕሊኬሽኖች እንደገና ሳያጠናቅቁ ዲኤልኤልን ማዘመን ይችላሉ። ስለ DLLs ተጨማሪ መረጃ ለማግኘት፣ DLLs በ Visual C++ ይመልከቱ።