Delphi дээр хэрэглэгчийн интерфейс үүсгэх зөвлөмж. Delphi Delphi-ийн интерфейстэй ажиллах онцлогууд

Viber татаж авах 23.01.2022
Viber татаж авах

Delphi програмчлалын орчны хамгийн том давуу талуудын нэг нь түүний нээлттэй архитектур бөгөөд үүний ачаар Delphi нь танд "програмчлалын орчныг програмчлах" боломжийг олгодог метапрограмчлалын төрлийг олгодог. Энэ арга нь Delphi-г хэрэглээний хөгжүүлэлтийн системийн чанарын шинэ түвшинд хүргэж, хэрэглээний системийг бий болгох бараг бүх үе шатыг дэмждэг нэмэлт хэрэгслүүдийг энэ бүтээгдэхүүнд суулгах боломжийг танд олгоно. Ийм өргөн боломжууд нь IDE (Integrated Development Environment) болон гадаад хэрэгслүүдийг холбох холбоос болох Delphi-д хэрэгжүүлсэн нээлттэй интерфейс гэж нэрлэгддэг ойлголтын ачаар нээгдэж байна.

Энэ нийтлэл нь Delphi-ийн нээлттэй интерфэйсүүдэд зориулагдсан бөгөөд тэдгээрийн өгч буй боломжуудын тоймыг өгдөг. Delphi нь зургаан нээлттэй интерфэйсийг тодорхойлдог: Tool Interface, Design Interface, Expert Interface, File Interface, Edit Interface, Version Control Interface. Энэ нийтлэлийн хүрээнд бид тус бүрийн чадварыг нарийвчлан тайлбарлаж, тайлбарлах боломжгүй юм. Delphi-ийн эх бичвэрүүд нь хэлэлцэж буй асуудлуудыг илүү нарийвчлан ойлгоход тань туслах болно; Аз болоход, хөгжүүлэгчид тэдэнд дэлгэрэнгүй тайлбар өгсөн. Нийтийн интерфэйсүүдийг төлөөлөх ангиудын мэдэгдлүүд нь...\Delphi\Source\ToolsAPI лавлах дахь харгалзах модулиудад агуулагддаг. Дизайн интерфэйс (modul DsgnIntf.pas) нь өмчийн засварлагч болон бүрэлдэхүүн хэсэг засварлагчийг бий болгох хэрэгслүүдээр хангадаг.

Үл хөдлөх хөрөнгийн болон бүрэлдэхүүн хэсгүүдийн засварлагч нь тусдаа хэлэлцэх сэдэв тул харгалзах шинж чанарын утгыг өөрчлөхийг оролдох үед өмчийн редактор нь Объект шалгагчийн үйл ажиллагааг хянадаг бөгөөд бүрэлдэхүүн хэсэг засварлагчийг хоёр товшилтоор идэвхжүүлдэг гэдгийг санацгаая. маягт дээр байрлуулсан бүрэлдэхүүн хэсгийн зураг дээрх хулганы зүүн товч. Хувилбарын хяналтын интерфэйс (VCSintf.pas модуль) нь хувилбарын хяналтын системийг бий болгоход зориулагдсан. 2.0 хувилбараас хойш Delphi нь Intersolv PVCS хувилбарын хяналтын нэгдсэн системийг дэмждэг тул ихэнх тохиолдолд өөрийн системийг хөгжүүлэх шаардлагагүй байдаг. Энэ шалтгааны улмаас бид Хувилбарын хяналтын интерфейсийг авч үзэхгүй байх болно. Файлын интерфейс (FileIntf.pas модуль) нь IDE-ийн ажиллаж байгаа файлын системийг хүчингүй болгох боломжийг олгодог бөгөөд энэ нь файл хадгалах өөрийн аргыг сонгох боломжийг олгодог (жишээлбэл, мэдээллийн сангийн сервер дээрх Memo талбарт). Засварлах интерфэйс (EditIntf.pas модуль) нь кодыг шинжлэх, үүсгэх, код засварлагчийн цонхон дахь курсорын байрлалыг тодорхойлох, өөрчлөх, мөн эх текстийн синтаксик тодруулалтыг хянах боломжийг олгодог эх текстийн буферт хандах боломжийг олгодог.

Тусгай ангиуд нь маягт дээр байрлуулсан бүрэлдэхүүн хэсгүүдийг (бүрэлдэхүүн хэсгийн төрлийг тодорхойлох, эцэг эх болон хүүхдийн бүрэлдэхүүн хэсгүүдийн лавлагаа авах, шинж чанарт хандах, фокусыг шилжүүлэх, устгах гэх мэт), маягт өөрөө болон төслийн нөөц файлд интерфейсээр хангадаг. Засварлах интерфейс нь модулийн эх текстийг өөрчлөх, маягтыг өөрчлөх, бүрэлдэхүүн хэсгийн нэрийг өөрчлөх, модулийг хадгалах, нэрийг өөрчлөх, устгах, төслийн нөөц файлыг өөрчлөх, гэх мэт. Хэрэгслийн интерфейс (ToolIntf модуль. pas) нь хөгжүүлэгчдэд IDE-ийн төлөв байдлын талаархи ерөнхий мэдээллийг олж авах, төсөл болон бие даасан файлуудыг нээх, хадгалах, хаах, модуль үүсгэх, одоогийн төслийн талаар мэдээлэл авах зэрэг үйлдлүүдийг хийх боломжийг олгодог. (модуль, маягтын тоо, тэдгээрийн нэр гэх мэт) , файлын системийг бүртгэх, тусдаа модулиудын интерфейсийг зохион байгуулах гэх мэт. Модульчлагдсан мэдэгдэгчдээс гадна Tool Interface нь файл, төслүүдийг нээх/хаах, ширээний төслийн файлыг ачаалах, хадгалах, төслийн модулиудыг нэмэх/хасах, багцуудыг суулгах/устгах, төсөл эмхэтгэх, болон бусад үйл явдлуудын талаар мэдээлэх нэмэлт мэдээлэгчийг тодорхойлдог. in Модульчлагдсан мэдэгдэгчээс ялгаатай нь нэмэлт мэдээлэгч нь зарим үйл явдлын гүйцэтгэлийг цуцлах боломжийг танд олгоно.

Нэмж дурдахад, Tool Interface нь Delphi IDE-ийн үндсэн цэс рүү нэвтрэх боломжийг олгодог бөгөөд танд нэмэлт зүйлсийг оруулах боломжийг олгодог. Expert Interface (ExtIntf.pas модуль) нь IDE-д суурилуулсан програм хангамжийн модулиуд болох мэргэжилтнүүдийг бий болгох үндэс суурь бөгөөд түүний функцийг өргөжүүлэх болно. Мэргэжилтний жишээ бол өгөгдлийн сангийн хүснэгтийн агуулгыг харах, өөрчлөх маягт үүсгэдэг Delphi мэдээллийн сангийн маягтын шидтэн юм. Шинжээчдийн ангиллыг тодорхойлсны дараа бид Делфи манай шинжээчийн талаар "суралцаж" байгаа эсэхийг шалгах хэрэгтэй. Үүнийг хийхийн тулд та RegisterLibraryExpert процедурыг дуудаж, шинжээчийн ангийн жишээг параметр болгон дамжуулж бүртгүүлэх хэрэгтэй. Жишээ болгон Delphi цэсийн харгалзах зүйлийг сонгоход ажиллаж байгаа гэсэн мессежийг харуулах esStandard загварын энгийн шинжээчийг бүтээцгээе. Дээрх хүснэгтээс харж байгаагаар esStandard хэв маяг нь зургаан аргыг хүчингүй болгохыг шаарддаг:

Шинжээчийг "үйлдвэрлүүлэх" тулд та Component/Install Component... цэсийн зүйлийг сонгоод Browse харилцах цонхноос шинжээчийг агуулсан модулийг (манай тохиолдолд exmpl_01.pas) сонгоод OK товчийг дарж, дараа нь dclusr30.dpk багцыг хөрвүүлсний дараа Delphi-ийн үндсэн цэсний Тусламж хэсэгт Simple Expert 1 гэсэн зүйл гарч ирэх бөгөөд сонгосон үед "Стандарт шинжээч эхэллээ!" гэсэн мэдээллийн мессеж гарч ирнэ. Delphi яагаад шинжээч цэсийн зүйлийг Тусламж хэсэгт байрлуулсан нь нууц хэвээр байна. Хэрэв цэсийн зүйл таны хүссэн газар биш, Delphi-ийн хүссэн газар гарч ирдэг нь танд таалагдахгүй байгаа бол дараах сонголтыг хийх боломжтой: цэсийн зүйлийг автоматаар үүсгэхийг арилгадаг нэмэлт маягтаар мэргэжилтэн үүсгэх, мөн Хэрэгслийн интерфейсийг ашиглан "гараар" цэсийн зүйлийг нэмнэ үү. Энэ нь үндсэн цэсэн дэх шинэ зүйлийн байршлыг дур зоргоороо тохируулах боломжийг танд олгоно.

Цэсийн зүйл нэмэхийн тулд хэрэглүүрийн интерфейсийн үндэс болох TIToolServices анги болон IDE үндсэн цэс болон түүний зүйлүүдийн интерфейсийг хэрэгжүүлдэг TIMainMenuIntf, TIMenuItemIntf ангиудыг ашиглана уу. ToolServices ангиллын TIToolServices-ийн жишээг IDE эхлүүлсэн үед өөрөө үүсгэнэ. Delphi-ийн үндсэн цэс болон түүний зүйлүүдийн интерфейсийг гаргах үүрэг нь бүхэлдээ хөгжүүлэгчийн үүрэг гэдгийг анхаарна уу. Замдаа шинжээчийн функциональ ачааллыг бага зэрэг хүндрүүлье: цэсийн зүйлийг идэвхжүүлэх үед энэ нь одоогоор орчинд нээлттэй байгаа төслийн нэрийн тухай гэрчилгээ олгоно: Энэ жишээнд AddIDEMenuItem функц нь төв байрыг эзэлдэг. , энэ нь IDE Delphi-ийн үндсэн цэсэнд цэсийн зүйл нэмдэг. Параметрийн хувьд энэ нь цэсийн шинэ зүйлийн текст, түүний таних тэмдэг, өмнө нь шинэ зүйл оруулсан зүйлийн таних тэмдэг, Ctrl товчлуурын хамт түлхүүрийн бэлгэдлийн дүрслэлийг хүлээн авдаг. шинэ зүйл, шинэ зүйлийн сонголттой харгалзах үйл явдал зохицуулагч. Бид "Харах" хэсэгт "Бугуйн цаг"-ын өмнө шинэ цэс нэмсэн.

Одоо мэдэгдэгчидтэй танилцацгаая. Төслийн хаалт/нээлтийг хянаж, идэвхтэй төслийн нэрийг хадгалах талбарыг тохируулдаг нэмэлт мэдэгдэгчийг тодорхойлъё (бид өмнөх жишээтэй харьцуулахад өөрчлөгдөөгүй аргуудын хэрэгжилтийг товчхон болгохын тулд орхих болно): мэдэгдэгчийг хэрэгжүүлэхийн тулд бид TIAddInNotifier-ийн удам болох TAddInNotifier ангиллыг тодорхойлж, FileNotification аргыг хүчингүй болгосон. Нэмэлт мэдээлэгчийн хариу өгөх боломжтой үйл явдал тохиолдох бүрт IDE энэ аргыг дуудна (ийм үйл явдал бүрийг TFileNotification төрлийн харгалзах тогтмолоор заана). TAddInNotifier анги дахь Expert талбарыг шинжээчтэй санал хүсэлт гаргахад ашигладаг (TAddInNotifier.FileNotification арга). Шинжээчийн устгагч дээр мэдээлэгч нь бүртгэлгүй, мэдэгдэгч устгагдсан байна. Одоо модуль мэдэгдэгчийн хэрэглээг харуулъя. Төслийн файлыг хадгалах үйлдэл бүрийн талаар мессеж гаргадаг нэмэлт мэргэжилтэн үүсгэцгээе (товчлох үүднээс бид аль хэдийн мэддэг аргуудын хэрэгжилтийг танилцуулаагүй болно): Энэ жишээнд нэмэлт шинжээч үйл явдлыг хянадаг. төслүүдийн нээлт/хаалтын дагуу.

Төслийг нээх бүрт төслийн файлд тохирох модуль мэдэгдэгч бүртгэгддэг. Хэрэгжүүлэлтийн хувьд модульчлагдсан мэдэгдэгчид нь нэмэлт мэдээлэгчтэй төстэй: бид TIModuleNotifier-ийн удам болох TModuleNotifier ангиллыг тодорхойлж, түүний Notify болон ComponentRenamed аргуудыг хүчингүй болгодог. Энэ модультай холбоотой тодорхой үйл явдал тохиолдоход IDE нь Notify аргыг дууддаг; Энэ аргын хүрээнд тодорхой үйл явдалд үзүүлэх хариу үйлдлийг тодорхойлдог. Модулийн маягт дээрх бүрэлдэхүүн хэсгийн нэрийг өөрчлөх үед ComponentRenamed аргыг дууддаг. Бид энэ аргыг ашигладаггүй, гэхдээ бид үүнийг хүчингүй болгох ёстой гэдгийг анхаарна уу, эс тэгвээс бүрэлдэхүүн хэсгийн нэр өөрчлөгдөх үед үндсэн ангийн хийсвэр аргыг дуудах бөгөөд энэ нь урьдчилан таамаглах боломжгүй үр дагаварт хүргэдэг.

Модульчлагдсан мэдэгдэгчийг бүртгэх нь нэмэлт мэдээлэгчийг бүртгүүлэхтэй харьцуулахад арай илүү төвөгтэй процесс юм: эхлээд бид модулийн интерфейсийг (TIModuleInterface) олж аваад дараа нь модулийн интерфейсийг ашиглан мэдэгдэгчийг бүртгэдэг. Төсөл хаагдах үед модульчлагдсан мэдэгдэгч бүртгэлгүй (дахин TIModuleInterface ашиглан) бөгөөд мэдэгдэгч устгагдана. Эцэст нь хэлэхэд бид код засварлагчийн цонхонд курсорын байрлалыг хэрхэн тодорхойлохыг харуулах болно. Тохирох цэсийн зүйлийг сонгохдоо идэвхтэй файлын нэр болон доторх курсорын байрлалыг агуулсан мессежийг харуулах мэргэжилтэн үүсгэцгээе (зөвхөн энэ жишээнд шаардлагатай аргуудын хэрэгжилтийг харуулав): Курсорын байрлалыг тодорхойлохын тулд, бид дараах интерфэйсүүдийн дарааллыг авах ёстой: модульчлагдсан интерфейс (TIModuleInterface); код засварлагчийн интерфейс (TIEditorInterface); редакторын цонхонд модулийн танилцуулгын интерфейс (TIEditView).

Хэрэв шинжээч цэсийн зүйлийг сонгохдоо эх текст файл (*.pas) идэвхтэй байвал идэвхтэй файлын нэр болон доторх курсорын одоогийн байрлалыг агуулсан мессеж гарч ирнэ. Хэрэв идэвхтэй файл нь pas файл биш бол мессеж гарахгүй. Идэвхтэй файлын нэрийг авахын тулд TIToolServices ангийн GetCurrentFile аргыг ашиглана уу. Энэ нь нээлттэй интерфэйсийг ашиглах арга замуудын талаархи бидний дүгнэлтийг дуусгаж байна. CD-ROM нь өгөгдсөн бүх жишээнүүдийн эх кодыг агуулдаг. CD-ROM нь хэрэглэгчдэд Delphi модулиудын эх текстийг хавчуурга хийх боломжийг олгодог нэмэлт шинжээчийг агуулсан илүү төвөгтэй, нарийвчилсан жишээг агуулдаг. Bookmarks Expert програмыг суулгах, ашиглах товч заавар bkmrks97.htm файлд байгаа. Тиймээс, энэ нийтлэл нь нээлттэй интерфейсүүдийн ерөнхий тоймыг өгч, тэдгээрийн хэрэглээний жишээг өгдөг. Дахин нэг удаа давтан хэлье: нээлттэй интерфэйсүүдийн эх кодууд байгаа тул та сонирхож буй нарийн ширийн зүйлийг хялбархан ойлгох боломжтой. Нээлттэй интерфэйсийн олон янзын боломжууд нь танд нэгээс олон зоримог бөгөөд хэрэгтэй санааг өгнө гэж найдаж байна.

зөвхөн үр дүнгийн төлөө

эцсийн хугацааг хатуу мөрдөх

Ил тод байдал

төслийн хэрэгжилт

техникийн дэмжлэг бэлэг болгон

1С дээр програмчлал, өөрчлөлт, зөвлөгөө

Бид хэрхэн ажиллаж байна

1. Бид утсаар асуудлыг хэлэлцдэг. Хэрэв танд алсаас хандах боломжтой бол үүнийг компьютерийн дэлгэц дээр харуул.

2. Төсөл том бол бид ажлыг рублиэр, хэрэв үгүй ​​бол ойролцоогоор цагийг тооцдог.

3. Бид ажлаа дуусгадаг.

4. Хөтөлбөрт хамрагдсан ажлыг хүлээн авна, дутагдал байвал бид засна.

5. Бид нэхэмжлэх гаргадаг, та төлнө.

Ажлын өртөг

1. Бүх ажлыг зөвлөгөө өгөх, стандарт тохиргоог шинэчлэх, шинэ тайлан боловсруулах эсвэл програмчлах, боловсруулах, товчлуур гэх мэт 3 ангилалд хуваана.

3. 10 цагаас дээш хугацаагаар ажиллах бол ажлын тодорхойлолт, өртөг бүхий техникийн тодорхойлолтыг урьдчилан бэлтгэсэн байх ёстой. Техникийн нөхцөлийг тантай тохиролцсоны дараа ажил эхэлнэ.

Техникийн дэмжлэг

1. Хэрэв та 3 сарын дотор өмнө нь хүлээж авсан ажилд ямар нэгэн алдаа илэрвэл бид үнэ төлбөргүй засна.

2. Байнгын үйлчлүүлэгчдийн хувьд ажлынхаа дутагдлыг нэг жилийн дотор үнэ төлбөргүй засдаг.

Таны бизнесийг удирдах програм хангамж.

1С: Enterprise худалдаж аваарай

Бид 1С-ийн албан ёсны дилер тул та биднээс төрөл бүрийн програм хангамжийн бүтээгдэхүүн, лиценз худалдаж авах боломжтой. Бид "хайрцаг" худалдаж авахаас гадна программыг тохируулах, зөвлөгөө өгөх, үндсэн тохиргоог хийхэд туслах болно.

  • Нягтлан бодох бүртгэл
  • Дэлгүүрийн автоматжуулалт
  • Бөөний худалдаа
  • Суулгах болон анхны тохиргооны тусламжийг багцад багтаасан болно!
  • Хэрэглэгчийн хэрэгцээнд нийцүүлэн тохиргоог нарийн тохируулах, стандарт тохиргоонд шаардлагатай функц байхгүй тохиолдолд шинэ модулиудыг хөгжүүлэх.
1c нягтлан бодох бүртгэл 1С: Худалдааны менежмент 1С: Жижиглэн худалдаа 1С: Цалин ба боловсон хүчний менежмент
3300 рубльээс. 6700 рубльээс. 3300 рубльээс. 7400 рубльээс.

Серверийн хангамж.

Серверийн шуурхай тохиргоо + 1С.

Сервер байхгүй юу? Асуудалгүй, бид үүлэн доторх серверийг сонгож, хурдан тохируулах болно. Бага хэмжээний төлбөрөөр та маш найдвартай шийдлийг авах болно.

  • Боломжтой хугацаа 24\7
  • Өөрийн системийн администратортой байх шаардлагагүй (хуримтлал нь таны серверийн зардлыг нөхөх болно).
  • Сервер дээр 1С-ийг хурдан тохируулах, суулгах, 3 хоногийн дараа та аль хэдийн бүрэн ажиллаж байгаа системтэй болно.
  • Хэрэв та шийдэлд сэтгэл хангалуун бус байвал хүссэн үедээ дотоод сервер рүү шилжиж болно.

Таны 1С-ээс SMS

Та үйлчлүүлэгчдээ урамшуулал, хөнгөлөлтийн талаар мэдэхийг хүсч байна уу? Үйлчлүүлэгчид буцаж ирэхгүй байна уу? 1С-ээс шууд SMS илгээхийг тохируулаарай!

Манай компани 1С-ээс хэрэглэгчдэдээ шууд SMS илгээх үйлчилгээг хурдан шуурхай хийх боломжтой болно. Автоматжуулж болох үйл явдлын жишээ:

  • Худалдан авалт хийсэнд баярлалаа, дараагийн худалдан авалтын дараа урамшуулал олгоно.
  • Төрсөн өдөр/бусад чухал эсвэл баярын бэлэг болгон картанд урамшуулал хуримтлуулах.
  • Агуулахад бараа ирсэн тухай мэдэгдэл.
  • Бэлгийн урамшууллын хугацаа дууссан.
  • Урьдчилгаа төлбөр хүлээн авсан тухай мэдэгдэл, барааны захиалга.
  • Дэлгүүр/оффисын чиглэл, утасны дугаар бүхий хаяг.
  • гэх мэт.

1С-д суурилуулах ажлыг манай мэргэжилтнүүд эсвэл танай ажилтнууд хийж болно. Та тарифыг SMS тарифын хуудаснаас үзэх боломжтой.

  • Баталгаат SMS хүргэлт, мөнгө зөвхөн хүргэсэн SMS-ээс авдаг.
  • SMS бүрийн үнэ тусдаа.
  • Өөр өөр аргаар үлдэгдлээ цэнэглэ.
  • Бүх илгээсэн SMS-ийн түүхийг хүссэн үедээ харах боломжтой.
  • Зурвас хүлээн авагчийн утсан дахь дижитал дугаарын оронд илгээгчийн нэр.

Би C++ кодоос Delphi анги ашиглахад асуудалтай байна. delphi dll demo бөгөөд энэ нь объектыг буцаадаг функцийг экспортлодог.
миний Delphi Dll код дараах байдалтай байна.

DelphiTest номын сан; // хэсгийг ашигладаг.... төрөл IMyObject = интерфэйсийн процедур DoThis(n: Integer); функц DoThat: PWideChar; Төгсгөл; TMyObject = class(TInterfacedObject,IMyObject) процедур DoThis(n: Бүхэл тоо); DoThat функц: PChar; Төгсгөл; // TMyObject хэрэгжилтийг эндээс үзнэ үү ... процедур TMyObject.DoThis(n: Integer); start showmessage("та DoThis аргыг "+intToStr(n) +"параметр"-ээр дуудаж байна); Төгсгөл; функц TMyObject.DoThat: PChar; start showmessage("та DoThat функцийг дуудаж байна"); Үр дүн:= Pchar("Hello im Dothat"); Төгсгөл;

// DLL функцийг экспортлох:

CreateMyObject функц: IMyObject; stdcall;экспортлох; var txt: TextFile; AssignFile эхлэх(txt,"C:\log.log"); Дахин тохируулах (txt); Writeln(txt, "Сайн уу"); Үр дүн:= TMyObject.Create; Төгсгөл; CreateMyObject экспортлох;

Би C++ төсөл дээрээ IMyObject интерфейсийг дараах байдлаар зарласан:

Анги IMyObject ( public: IMyObject(); virtual ~IMyObject(); virtual void DoThis(int n) = 0; virtual char* DoThat() = 0; );

мөн миний үндсэн функц иймэрхүү байна:

Typedef IMyObject* (__stdcall *CreateFn)(); int main() ( HMODULE hLib; hLib = LoadLibrary(L"DelphiTest.dll"); assert(hLib != NULL); // нэвтрүүлэх !! CreateFn pfnCreate; pfnCreate = (CreateFn)GetProcAddress((HINSTANCE)hLib,OCreject "); if (pfnCreate == NULL) ( DWORD errc = GetLastError(); printf("%u\n", errc); // 127 алдаа гарлаа ) else( printf("амжилттай ачаалал\n"); ) IMyObject* objptr = pfnCreate(); objptr->DoThis(5); FreeLibrary(hLib); int in; scanf_s("%i", &in); буцаана 0; )

Энэ жишээнд би экспортлогдсон функцэд хандахыг оролдох үед ажиллах үеийн алдаа гарсан. мөрөнд гарсан алдаа:
IMyObject* objptr = pfnCreate();

Миний жишээнд юу буруу байгааг хэлж чадах уу?
Боломжтой бол C++ кодоос Delphi ангид (DLL-д) хандах ямар нэгэн ажлын жишээ.

Шийдэл

Эхний асуудал бол аргын конвенцийг дуудах явдал юм. Delphi интерфейс нь Delphi-ийн тусгай дуудлагын конвенц болох регистрийг ашигладаг. stdcall-ийн хэрэглээ Жишээлбэл, интерфэйсийн аргуудын хувьд.

Дараагийн асуудал нь C++ хэл дээр байна. Таны C++ интерфэйс нь IUnknown-ээс үүсэлтэй байх ёстой. Нэмж хэлэхэд энэ нь бүтээгч эсвэл устгагчийг зарлах ёсгүй.

Үүнээс гадна таны Delphi кодыг PWideChar-ээр экспортлодог бөгөөд энэ нь char*-д зураглаагүй бөгөөд wchar_t*-д зураглагдсан байна.

Цааш нь харвал PChar-г буцаах нь энд хэвийн ажиллаж байна, учир нь таны хэрэгжилт нь шууд утгыг буцаана. Гэхдээ илүү ноцтой код нь динамикаар хуваарилагдсан мөрийг ашиглахыг хүсэх бөгөөд энэ үед таны дизайн алдаатай байна.

Системийн драйвын үндсэн хэсэгт файл үүсгэхийн тулд та өндөр түвшний администратор байх ёстой гэдгийг анхаарна уу. Тиймээс энэ бол бүтэлгүйтлийн бас нэг боломжит цэг юм.

Би бусад алдаанууд байгаа гэж найдаж байна, гэхдээ энэ бол миний олж мэдсэн зүйл юм.

Энэ бол форумын асуултууд дээр үндэслэсэн нийтлэл юм: "Би DLL-ээс мөрийг хэрхэн буцаах вэ?", "Бүртгэлийн массивыг хэрхэн дамжуулах, буцаах вэ?", "Маягтыг DLL руу хэрхэн дамжуулах вэ?".

Та амьдралынхаа хагасыг үүнийг олоход зарцуулахгүйн тулд энэ нийтлэлд би бүх зүйлийг тавган дээр авчрах болно.

Энэ нийтлэлийн сэдвүүдийг энэ блогт янз бүрийн түвшинд нэгээс олон удаа хөндсөн боловч энэ нийтлэлд тэдгээрийг нэгтгэж, үндэслэлтэй болгосон. Товчхондоо, та DLL хөгжүүлдэг хүмүүст энэ нийтлэлийн холбоосыг шидэж болно.

Чухал тэмдэглэл: нийтлэлийг заавал унших ёстой дараалсан. Кодын жишээг зөвхөн байдлаар өгсөн болно жишээнүүд, нийтлэлийн алхам (цэг) бүрт жишээ кодыг шинэ дэлгэрэнгүй мэдээлэлтэй нэмж оруулсан болно. Жишээлбэл, нийтлэлийн эхэнд алдаа гаргаагүй, "сонгодог" аргуудыг (жишээ нь: GetLastError, sdtcall конвенц гэх мэт) зааж өгсөн бөгөөд нийтлэл ахих тусам илүү тохиромжтой аргуудаар солигддог. Үүнийг "шинэ" ("ер бусын") загвар нь асуулт үүсгэхгүйн тулд хийсэн. Үгүй бол жишээ болгонд "үүнийг доор дурдсан догол мөрөнд авч үзэх болно" гэх мэт тэмдэглэл оруулах шаардлагатай болно. Ямар ч тохиолдолд өгүүллийн төгсгөлд нийтлэлд дурдсан бүх зүйлийг харгалзан бичсэн бэлэн кодын холбоос байна. Та зүгээр л аваад хэрэглэж болно. Мөн нийтлэлд яагаад, яагаад тайлбарлав. Хэрэв та "яагаад, яагаад" гэсэн асуултыг сонирхохгүй байгаа бол дүгнэлт болон жишээг татаж авах холбоосыг дуустал гүйлгэ.



Бид уншихыг зөвлөж байна

Топ