עבודה מול DLL

../images/Emo41.gif עבודה מול DLL

התקנתי על ה XP מדפסת (מחוברת ב USB), שאני מעוניין לעבוד ישירות מול ה DLL שלה (יש תעוד של היצרן למפתחים). לקחתי את ה DLL של המדפסת, העתקתי אותה לתיקייה חדשה, שבתוכה כתבתי קוד שמתממשק ל DLL ומפעיל בו פונקציה מסויימת (בדיקת תקינת מדפסת, למשל), אך הנ"ל לא עובד. 1. האם יתכן שאני לא יכול להעתיק ולעבוד כך סתם מול ה DLL, ואני חייב לעבוד מול ה DLL במיקום שמערכת ההפעלה מכירה אותו, ולשם היא התקינה אותו (כשהוספתי חומרה חדשה, ל system32 למשל) ? 2. כיצד אני יכול לדעת מול איזה DLL (אולי הוא קשור לעוד כמה..) בדיוק מערכת ההפעלה עובדת כאשר היא מפעילה את המדפסת ? (חיפשתי במנהל ההתקנים / לוח בקרה, לא מצאתי משהו מעניין)
 

user32

Well-known member
מנהל
זה מתאים לפורום דוט נט

אבל בכל זאת... כשאתה קורא לLoadLibrary אתה צריך לוודא שאתה משתמש בנתיב המלא של הDLL או לחילופין שהDLL נמצא בספריה system32. אם הEXE והDLL נמצאים באותה ספריה זה יכול לעבוד אבל זה תלוי מי הworking directory באותו זמן. במצב דיבאג למשל הספריה תהיה אחרת (איפשהו בprogram files). חוץ מזה תבדוק את הדברים הבאים: האם הטעינה של הDLL נכשלת או שרק הקריאה לפונקציה האם הDLL תלוי בקבצים אחרים? יש כלים שבודקים את זה
 
תגובה :

אני לא קורה ל LoadLibrary, מתוך דוט נט, אני מגדיר את הפונקציה כ extern (כלומר, מפעיל DLL שהוא Unmannaged) ה DLL נמצא בתיקייה ה BIN של הפרוייקט. הבעיה היא לא שהוא לא מוצא את ה DLL (אם אני כותב נתיב לא נכון, אני פשוט מקבל Exception של Not Found) הבעיה היא לא שהוא לא מוצא את הפונקציה (אם אני קורא לפונקציה בשם אחר, אני פשוט מקבל Exception מתאים) הפונקציה מחזירה True/False במידה והיא הצליחה לתקשר עם המדפסת, ובנוסף מחזירה (פרמטר Out) נתונים על המדפסת.
הבעיה היא שהיא מחזירה לי לי True גם כאשר המדפסת כבוייה / לא מחוברת, ובכל מקרה לא מחזירה לי את הנתונים שלה. לכן אני חושד אולי שהפעולה הבסיסית מול ה DLL עובד, אבל ההמשך לא, אולי מכיוון שחסרים לו רכיבים נוספים... (למרות שהוא לא עף).
 
למעלה