פורסם: 09/01/2007 - 20:43
נושא ההודעה: קימפול libhdate על מערכת Windows
|
שלום לכם,
אני מנסה לקמפל את הספרייה libhdate על ווינדוס. גייסתי לשם כך את cygwin, ביצעתי configure לפי ההוראות שבאתר, אבל בפלט של make אני רואה הרבה הודעות
קוד: | ../../src/.libs/libhdate.a(hdate_string.o):hdate_string.c:(.text+0x2fa):undefined reference to '_libintl_bindtextdomain' |
לדוגמא. הייתי מעתיק פה הכל, אבל אני לא רואה דרך שאפשר להעתיק ממנה את הפלט מקונסול cygwin.
את תיקיית src עצמה אני מסוגל לקמפל, אבל לא את הדוגמאות שמצורפות. כשאני מנסה להשתמש באובייקט שקיבלתי בויז'ואל סטודיו 2003, אני מקבל את הודעת השגיאה:
temp error LNK2019: unresolved external symbol _hdate_set_gdate referenced in function _main
שאומרת בדיוק אותו דבר לדעתי.
למישהו יש רעיון? כיוון? משהו?
תודה.
|
|
חזרה לתוכן הדיון |
פורסם: 09/01/2007 - 21:01
נושא ההודעה:
|
האים ביטלתה את הקישור ל gettext ?
קוד: | ./configure --disable-nls |
|
|
חזרה לתוכן הדיון |
פורסם: 09/01/2007 - 21:11
נושא ההודעה:
|
אוקיי, הצלחתי לקמפל כך שהכל רץ ע"י הוספת --disable-nls לסקריפט הconfigure.
הבעייה היא שעכשיו התוכנה פועלת רק בסביבת cygwin, ומבקשת את הdll בכל פעם שאני מריץ אותו ישירות מווינדוס.
יש איזושהי דרך להפעיל את התוכנה בלי הסתמכות על cygwin? נסיון לקימפול בVS נותן לי את הודעת השגיאה של קודם, גם עם הספריה החדשה.
|
|
חזרה לתוכן הדיון |
פורסם: 09/01/2007 - 21:23
נושא ההודעה:
|
כך עובדים עם cygwin . אם אתה מעוניין בקובץ הרצה רגיל של חלונות תנסה את mingw.
http://www.mingw.org/
|
|
חזרה לתוכן הדיון |
פורסם: 09/01/2007 - 21:26
נושא ההודעה:
|
אוקיי, אני אנסה, תודה!
|
|
חזרה לתוכן הדיון |
פורסם: 10/01/2007 - 18:28
נושא ההודעה:
|
אוקיי, הצלחתי לקמפל את הפרוייקט בסביבת mingw. עכשיו הייתי רוצה לקחת את זה צעד אחד קדימה, וליצור DLL כך שאוכל להשתמש בו בסביבת VB6.
איך אפשר לעשות את זה? האם זה מצריך שינויים בפרוייקט עצמו, או שאוכל לעקוף את זה?
ניסיתי לבנות קובץ קטן כ-DLL, כך שיעטוף את הספריה הקיימת. הקובץ נקרא hdatedll.c:
קוד: | #include "hdate.h"
__declspec (dllexport)
__stdcall DWORD getHoliday (DWORD d, DWORD m, DWORD y)
{
hdate_struct h;
hdate_set_gdate(&h, d, m, y);
return hdate_get_holyday(&h, 0);
} |
קימפלתי כך:
gcc -Wl,--add-stdcall-alias
בהתאם לרשום כאן: http://www.mingw.org/MinGWiki/index.php/VB-MinGW-DLL?PHPSESSID=0a747374cbb2c70240ba7acf65a1bc5c
הודעת השגיאה שקיבלתי:
קוד: | hdatedll.c:4: error: syntax error before "getHoliday"
hdatedll.c:4: error: syntax error before "d"
hdatedll.c: In function `getHoliday':
hdatedll.c:7: error: `d' undeclared (first use in this function)
hdatedll.c:7: error: (Each undeclared identifier is reported only once
hdatedll.c:7: error: for each function it appears in.)
hdatedll.c:7: error: `m' undeclared (first use in this function)
hdatedll.c:7: error: `y' undeclared (first use in this function)
hdatedll.c:9:2: warning: no newline at end of file |
מה אפשר לעשות בנידון?
תודה.
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 00:18
נושא ההודעה:
|
למה אתה חושב שהמהדר יודע מה זה DWORD ?
תנסה:
קוד: |
typedef unsigned long DWORD;
|
או אינקלוד ל:
נ.ב.
אין לי חלונות או וי-בי-6 כדי לנסות, אבל זה נראה לי הכיוון
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 21:42
נושא ההודעה:
|
תודה, ההודעה שלך בהחלט עזרה לי להתקדם. זה לא נגמר בזה, עדיין הייתה לי עבודה על קבצי DEF וניסיון להבין הודעות שגיאה של GCC, REGSVR32 ו-VB לסירוגין. אבל עכשיו זה עובד, ואני מאושר מתמיד. תודה!
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 22:55
נושא ההודעה:
|
האי-מייל שלי נמצא בדף הבית של libhdate למטה.
כאשר אתה שולך את הפטצ' תזכור שאין לי דרך לבדוק את הקוד מאחר ואין לי חלונות או vb6. אני אצתרך הרבה הסברים לגבי מה שעשיתה והדרכה מה היתי רואה במידה וכן היתי מנסה להדר ולהריץ את הקוד.
מטרה ראשונית: להוסיף באתר, דף שיסביר למי שרוצה להכין dll כזה, מה לעשות. לשם כך צריך הוראות כמה שיותר מפורטות ומדוייקות מה עשיתה ומה שינתה בקוד כדי להדר dll שמיש עבור vb6.
מטרה משנית: במידה והקוד שתשלח יהיה ברור וקל להבנה ( כך שלמרות שלא אוכל לנסות אותו, סביר שלא אשבור אותו כאשר אצרף אותו לקוד הקיים ) הקוד יכנס לגרסה הבאה משתמש יעשה configure --enable-vb6-dll ויקבל את ה dll.
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 23:21
נושא ההודעה:
|
אוקיי. למעשה לא שיניתי את הקבצים המקוריים, אלא רק הוספתי קוד במטרה לעטוף את הספריה ע"י DLL. הבעייה עם הDLL שיצרתי היא שהוא מכיל רק 4 פונקציות שהייתי צריך מכל המערכת, מאחר שלא היה לי זמן להמשיך הלאה וגם לא צורך.
קובץ הC נראה כך:
קוד: | #include <windows.h>
#include "hdate.h"
__declspec (dllexport)
__stdcall DWORD getHoliday (DWORD d, DWORD m, DWORD y)
{
hdate_struct h;
hdate_set_gdate(&h, d, m, y);
return hdate_get_holyday(&h, FALSE);
}
__declspec (dllexport)
__stdcall DWORD getHebDay (DWORD d, DWORD m, DWORD y)
{
hdate_struct h;
hdate_set_gdate(&h, d, m, y);
return h.hd_day;
}
__declspec (dllexport)
__stdcall DWORD getHebMonth (DWORD d, DWORD m, DWORD y)
{
hdate_struct h;
hdate_set_gdate(&h, d, m, y);
return h.hd_mon;
}
__declspec (dllexport)
__stdcall DWORD getHebYear (DWORD d, DWORD m, DWORD y)
{
hdate_struct h;
hdate_set_gdate(&h, d, m, y);
return h.hd_year;
}
__declspec (dllexport) BOOL __stdcall DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
} |
קימפלתי את libhdate על מערכת MinGW (למעשה msys), ע"י:
configure --prefix=/usr --disable-nls
make
make install
אח"כ קימפלתי את קובץ הDLL כך:
קוד: | g++ -shared -o hdatedll.dll hdatedll.c -Wl,-add-stdcall-alias,--out-implib,libhdatedll_dll.a -Lc:/msys/1.0/lib -lhdate |
לבסוף בניתי קובץ DEF שנראה כך:
קוד: | LIBRARY hdatedll
EXPORTS
getHoliday
getHebDay
getHebMonth
getHebYear |
ולסיום, ההכנסה לVB...
קוד: | Private Declare Function getHoliday Lib "hdatedll.dll" Alias "_Z10getHolidaymmm@12" (ByVal d As Long, ByVal m As Long, ByVal y As Long) As Long
Private Declare Function getHebDay Lib "hdatedll.dll" Alias "_Z9getHebDaymmm@12" (ByVal d As Long, ByVal m As Long, ByVal y As Long) As Long
Private Declare Function getHebMonth Lib "hdatedll.dll" Alias "_Z11getHebMonthmmm@12" (ByVal d As Long, ByVal m As Long, ByVal y As Long) As Long
Private Declare Function getHebYear Lib "hdatedll.dll" Alias "_Z10getHebYearmmm@12" (ByVal d As Long, ByVal m As Long, ByVal y As Long) As Long |
שימו לב שהAlias יכול להשתנות. כדי למצוא את הAlias החדש, צריך לפתוח את הDLL בעזרת הDependency Walker של ויז'ואל סטודיו או ידנית בעזרת כל עורך טקסט, ולחפש את השם של הפונקציה כפי שהוא מופיע בDLL.
זהו זה. נראה פשוט, אבל לקח לי יומיים להגיע לזה.
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 23:27
נושא ההודעה:
|
מגניב
יכנס בהקדם לאתר.
כאשר יהיה לי קצת יותר זמן אני גם אכניס את זה ל cvs ואח"כ זה יכנס לגירסה הבאה.
קובי.
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 23:33
נושא ההודעה:
|
Prism : | ...
זהו זה. נראה פשוט, אבל לקח לי יומיים להגיע לזה. |
נ.ב.
יומיים זה בסדר גמור
האם מישהוא מכיר דרך יותר יפה למצוא את ה Alias או לעקוף את הצורך בו ?
קובי.
|
|
חזרה לתוכן הדיון |
פורסם: 11/01/2007 - 23:39
נושא ההודעה:
|
נ.נ.ב
Prism: אני אצתרך שם ואי-מייל ( או כינוי Prism ? ) כדי שיהיה לי שם לכתוב בתעוד של הקוד וההסברים.
קובי.
|
|
חזרה לתוכן הדיון |
פורסם: 12/01/2007 - 16:44
נושא ההודעה:
|
שלחתי לך הודעה פרטית.
לגבי הaliases, לא מצאתי דרך טובה יותר. עקרונית VB אמורה למצוא את השם של הפונקציה בעצמה בהתבסס על השם הרגיל של הפונקציה (ולא השם המקושט), אבל זה פשוט לא עבד אצלי. יכול להיות שצריך להיות איזשהו טריק עם הקובץ DEF, ולהכניס שם את המידע לגבי הקישוט שנוסף לפונקציה ע"י GCC.
|
|
חזרה לתוכן הדיון |
פורסם: 12/01/2007 - 19:48
נושא ההודעה:
|
Prism : | שלחתי לך הודעה פרטית.
לגבי הaliases, לא מצאתי דרך טובה יותר. עקרונית VB אמורה למצוא את השם של הפונקציה בעצמה בהתבסס על השם הרגיל של הפונקציה (ולא השם המקושט), אבל זה פשוט לא עבד אצלי. יכול להיות שצריך להיות איזשהו טריק עם הקובץ DEF, ולהכניס שם את המידע לגבי הקישוט שנוסף לפונקציה ע"י GCC. |
VB זה לא ויזואל בייסיק???
_________________ ה בלוג שלי
|
|
חזרה לתוכן הדיון |
פורסם: 12/01/2007 - 20:09
נושא ההודעה:
|
nadavvin : |
VB זה לא ויזואל בייסיק??? |
וי-בי זה ויזואל ביסיק ו וי-בי-6 זה ויזואל ביסיק 6. מה השאלה ?
Prism: אני לא יודע להשתמש במערכת ההודעות באתר, תשלח לי מייל בקשה.
|
|
חזרה לתוכן הדיון |
פורסם: 13/01/2007 - 11:44
נושא ההודעה:
|
הכנסתי את ההסברים של Prism לאתר של libhdate כדי שמי שירצה להכין dll לשימוש עם vb6 יוכל לעשות זאת בקלות.
http://libhdate.sourceforge.net/install.html#windows
1. הערות והארות על ההסבר יתקבלו בברכה ( אין לי דרך לבדוק אותו בעצמי ... )
2. מי שמעוניין להכין את הקוד כפתצ' שאפשר להוסיף לחבילת הקוד הבסיסית של libhdate, מוזמן, אני כניראה בכל מקרה אעשה את זה מתי שהוא, אך כניראה רק בעוד הרבה זמן.
קובי.
|
|
חזרה לתוכן הדיון |
|