2011-03-17 10 views
10

मुझे लगता है कि मैं जब दृश्य स्टूडियो 10 का उपयोग कर gdcm निर्माण ठीक करने के लिए कोशिश कर रहा हूँ चेतावनी की एक श्रृंखला (32 बिट संस्करण) है:मैं इस बनाम असंगत डीएल लिंकेज चेतावनी को कैसे ठीक कर सकता हूं?

4>..\..\..\..\gdcm\Utilities\gdcmexpat\lib\xmlparse.c(647): warning C4273: 'XML_ParserCreate' : inconsistent dll linkage 
4>   d:\src\gdcm\gdcm\utilities\gdcmexpat\lib\expat.h(206) : see previous definition of 'XML_ParserCreate' 

समारोह में ही फोन लगता है:

XML_Parser XMLCALL 
XML_ParserCreate(const XML_Char *encodingName) 
{ 
    return XML_ParserCreate_MM(encodingName, NULL, NULL); 
} 

जहां

#define XMLCALL __cdecl 

और

XMLPARSEAPI(XML_Parser) 
XML_ParserCreate(const XML_Char *encoding); 

जहां

#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL 

और

#define XMLIMPORT __declspec(dllimport) 

तो मुझे लगता है कि ठीक से पढ़ रहा हूँ, इसका मतलब है कि लिंकेज लगातार XMLCALL-- सही माध्यम से __cdecl है? क्योंकि, यदि ऐसा है, तो चेतावनी अनिवार्य है, या क्या मैं इसे गलत व्याख्या कर रहा हूं?

उत्तर

16

नहीं, यह फ़ंक्शन परिभाषा से अनुपलब्ध __declspec(dllimport) शिकायत कर रहा है लेकिन फ़ंक्शन घोषणा पर मौजूद है। आपको इसे गंभीरता से लेना चाहिए, डीएलएल से आयातित फ़ंक्शन घोषित करने का अर्थ नहीं है लेकिन भी आपके कोड में मौजूद है। आप दोनों तरीकों से नहीं हो सकते हैं।

आमतौर पर यह गायब #define के कारण होता है। मैंने मैक्रो परिभाषाओं को संपादित किया है, मुझे लगता है, लेकिन जब डीएलएल का निर्माण होता है तो आप आमतौर पर बिल्ड कमांड (/ डी) में एक मैक्रो निर्दिष्ट करते हैं। ताकि फ़ंक्शन की घोषणा dllimport के बजाय dllexport का उपयोग करे। जो सुनिश्चित करता है कि समारोह डीएलएल से निर्यात हो जाता है। क्लाइंट कोड एक ही .h फ़ाइल का उपयोग करता है लेकिन उस मैक्रो परिभाषित किए बिना बनाया गया है। यह समारोह को डिलिमपोर्ट के रूप में घोषित करता है।

XMLIMPORT मैक्रो परिभाषा पर एक नज़र डालें, __declspec(dllexport) बंद होना चाहिए। एक और नैदानिक ​​निर्यातित कार्यों को सेट करता है, जो डंपबिन.एक्सई/निर्यात के साथ दिखाई देता है। अगर मैं सही ढंग से अनुमान लगाता हूं तो उन्हें गायब होना चाहिए।

+0

यह था - कि dllimport एक dllexport होना चाहिए था। – mmr

+0

वाह, मैं एक वैरिएबल निर्यात के साथ भी एक चूक गया। शीर्षलेख में मेरे पास 'COMMON_API बाहरी कॉन्स std :: स्ट्रिंग कुछ एसआरटी' जैसा था, जबकि सीपीपी फ़ाइल में मुझे 'const std :: string someStr ("पृष्ठभूमि") था, जो निर्यात/आयात विनिर्देशक गायब था। एपीआई मैक्रो टीमों को इस बात पर आधारित करता है कि इस परियोजना के पास एक मैक्रो परिभाषित है जिसे इसे डीएलएल बनाने के लिए कहा गया है या नहीं। मुझे इस पर नजर रखना होगा। – jxramos

संबंधित मुद्दे

 संबंधित मुद्दे