คำแนะนำสำหรับการใช้ Delphi เพื่อสร้างไฟล์ DLL multiplexed
ลองใช้อินเทอร์เฟซ DLL มาตรฐาน หมายความว่าประเภทพารามิเตอร์ที่ผ่านและประเภทการส่งคืนฟังก์ชันไม่สามารถเป็นเอกลักษณ์ของ Delphi เช่นสตริง (ansistring) รวมถึงอาร์เรย์แบบไดนามิกและประเภทคอมโพสิต (เช่นบันทึก) ที่มีสมาชิกประเภทเหล่านี้ สมาชิกประเภทเหล่านี้ หากคุณใช้ประเภทสตริงหรือประเภทอาร์เรย์แบบไดนามิกและผู้โทรไม่ใช่โปรแกรม Delphi คุณจะรายงานข้อผิดพลาดโดยทั่วไป ข้อผิดพลาดอาจเกิดขึ้นได้หากผู้โทรคือ Delphi แต่ผู้โทรหรือ Callee ไม่ได้อยู่ในหน่วยแรกที่มีหน่วยของไฟล์โครงการซึ่งไม่ใช่ Sharemem
หากผู้โทรเป็นแอปพลิเคชัน Delphi คุณอาจสามารถใช้วัตถุที่ไม่มีสมาชิกข้อมูลของประเภทที่ต้องห้าม (สตริงอาร์เรย์แบบไดนามิก) เป็นพารามิเตอร์หรือค่าส่งคืน แต่ควรหลีกเลี่ยงมากที่สุด
หากผู้โทรและบุคคลที่เรียกว่าเป็นทั้งโปรแกรม Delphi และจำเป็นต้องใช้สตริงหรืออาร์เรย์แบบไดนามิกเป็นพารามิเตอร์หน่วยรวมแรกของไฟล์โครงการระหว่างทั้งสองฝ่ายจะต้องเป็น Sharemem (โปรแกรม C ++ Builder อาจเหมือนกัน แต่ยังไม่ได้ทดสอบ)
หากผู้โทรไม่ใช่โปรแกรม Delphi, String, Array แบบไดนามิก, ชนิดข้อมูลแบบผสมและอินสแตนซ์คลาสที่มีสตริงหรืออาร์เรย์แบบไดนามิกไม่สามารถใช้เป็นพารามิเตอร์หรือค่าส่งคืนได้
ดังนั้นเพื่อปรับปรุงช่วง DLLs มัลติเพล็กซ์และหลีกเลี่ยงข้อผิดพลาดที่เป็นไปได้ควรใช้ประเภทพารามิเตอร์มาตรฐาน Win32 API มาตรฐานก่อนหน้านี้โดยใช้ตัวแปรสตริงการแปลง PCHAR (S) อาร์เรย์แบบไดนามิกจะถูกแปลงเป็นประเภทตัวชี้ (@array [0]) และเพิ่มความยาวของอาร์เรย์
หากผู้โทรและบุคคลที่เรียกว่าเป็นทั้งโปรแกรม Delphi และไม่ต้องการทำการแปลงด้านบนเพื่อความสะดวกในการเขียนขอแนะนำให้ใช้รูปแบบของแพ็คเกจรันไทม์ แพ็คเกจรันไทม์สามารถมั่นใจได้ว่าการเปิดตัวข้อมูลที่จัดสรรแบบไดนามิกที่ถูกต้อง ด้วยวิธีนี้เนื่องจากส่วนขยาย (.BPL) แสดงว่าไฟล์ถูก จำกัด ไว้ที่ Delphi/C ++ Builder (ไม่เหมือน DLL)
ประการที่สองพยายามหลีกเลี่ยงการใช้ฟังก์ชั่น/กระบวนการโอเวอร์โหลดให้มากที่สุด และวิธีการใน Delphi เช่น CreateByDefaultFile และ CreateDefault
ในที่สุดในฐานะผู้ให้บริการ DLL คุณควรจัดเตรียมไฟล์อินเทอร์เฟซการเขียนโปรแกรมโดยตรงเช่น. pas หรือ. dcu ใน delphi (ควร. pas เนื่องจากมีความคิดเห็น), .h และ .lib ใน C และ C ++ แทนที่จะปล่อยให้ผู้ใช้สร้างเอง สิ่งนี้สำคัญอย่างยิ่งหากคุณต้องมีฟังก์ชั่น/กระบวนการโอเวอร์โหลด นอกจากนี้ในฐานะแอปพลิเคชัน Delphi ไฟล์. PAS ที่ให้ไว้สามารถเชื่อมต่อล่วงหน้า (โดยใช้ภายนอกเพื่อระบุฟังก์ชั่นเอาต์พุตใน DLL) หรือใหม่กว่า (ใช้ LoadLibrary และ GetProcaddress) แสดงให้เห็นว่ามันเป็นทางการ (หรือ hiqos) และรับประกัน