2008-11-26 17 views
5

यह सभी सी # गुरुओं के लिए है। मैं कुछ समय पहले इस पर अपने सिर पर टक्कर लगी हूं, बिना किसी लाभ के नेट पर सभी प्रकार की सलाह की कोशिश की। विंडोज मोबाइल 5.0 में कार्रवाई हो रही है।मैं .NET CF अपवाद को कैसे हल करूं "PInvoke DLL नहीं ढूंढ सकता"?

मेरे पास MyDll.dll नामक एक डीएलएल है। MyDll.h में मेरे पास है:

extern "C" __declspec(dllexport) int MyDllFunction(int one, int two); 

MyDll.cpp में MyDllFunction की परिभाषा है:

[DllImport("MyDll.dll")] 
extern public static int MyDllFunction(int one, int two); 

ही में:

int MyDllFunction(int one, int two) 
{ 
    return one + two; 
} 

सी # वर्ग निम्नलिखित घोषणा-पत्र शामिल कक्षा मैं MyDllFunction को निम्न तरीके से कॉल कर रहा हूं:

int res = MyDllFunction(10, 10); 

और यह वह जगह है जहां खूनी चीज़ मुझे दे रही है "PInvoke DLL 'MyDll.dll' नहीं ढूंढ सकता"। मैं सत्यापित किया है कि मैं इस तरह के रूप सिस्टम कॉल पर PInvoke करना वास्तव में कर सकते हैं "GetAsyncKeyState (1)", घोषित:

[DllImport("coredll.dll")] 
    protected static extern short GetAsyncKeyState(int vKey); 

MyDll.dll निष्पादन को उसी फ़ोल्डर में है, और मैं भी है इसे किसी भी बदलाव और न ही सफलता के साथ/विंडोज फ़ोल्डर में डालने का प्रयास किया। किसी भी सलाह या समाधान की सराहना की जाती है।

+0

सुनिश्चित करें कि आप पर्याप्त खाली आभासी स्मृति किया है आशा है कि, पी के बाद से/आह्वान आयात उस पर असफल हो सकता है। – arul

+0

क्या आपने अपनी परियोजना में संदर्भ के रूप में डीएल जोड़ा है? यदि आप ऐसा करते हैं, तो आपको फ़ाइल को मैन्युअल रूप से कॉपी करने की आवश्यकता नहीं होगी।यदि समस्या बनी रहती है, तो शायद यह संभवतः डीएलएल फ़ाइल के कारण सही ढंग से नहीं बनाया गया है (शायद अलग मंच)। – kgiannakakis

+0

दोनों परियोजनाएं एक ही समाधान में हैं और उन्हें एक साथ तैनात किया गया है, मैन्युअल रूप से अपलोड करने की आवश्यकता नहीं है। –

उत्तर

2

शायद यह जांचने के लिए एक स्पष्ट चीज़ की तरह लगता है, लेकिन क्या आप सही सीपीयू आर्किटेक्चर के लिए देशी डीएलएल संकलित कर रहे हैं? आईआईआरसी, विंडोज मोबाइल कई सीपीयू आर्किटेक्चर पर चलता है।

+0

विंडोज मोबाइल केवल एआरएम आर्किटेक्चर पर चलता है और पॉकेट पीसी 2003 के बाद से है। – ctacke

+0

आह, ठीक है। उस से अनजान था। सुधारों के लिए धन्यवाद। –

+1

यहां पर ढूंढने वालों के लिए, इग्नास द्वारा दिए गए उत्तर को देखें कि उन्होंने इस जवाब को क्यों स्वीकार किया। –

0

आपके द्वारा सूचीबद्ध अपवाद और प्रश्न में आपके द्वारा रखे गए पिनवोक हस्ताक्षर के क्रमशः अलग-अलग नाम हैं: MyDll.dll और ThreadBenchLib.dll। क्या यह एक टाइपो या समस्या थी?

यदि समस्या नहीं है तो depends में DLL खोलने का प्रयास करें। यह संभव है कि एक असमान निर्भरता के कारण डीएलएल लोड विफल हो रहा है।

+0

यह टाइपो था, सही नाम MyDll.dll –

4

मुझे एक ही समस्या है, लेकिन इस बार शामिल प्लेटफार्मों में कोई स्पष्ट अंतर नहीं है। ऐसा कुछ ऐसा क्यों है जिसे 'सामान्य' माना जाता है, इतनी बुरी तरह से प्रलेखित है, इतना कठिन और सबसे खराब 'flaky'। क्या कोई ऐसा उपकरण है जो मुझे मेरे पीपीसी एमुलेटर पर जाने की अनुमति देता है, और चरण जांच (ए) से रोकता है कि डीएलएल है जहां सीएलआर इसकी अपेक्षा करता है (मैंने इसे एक ही निर्देशिका में रखा है, और एम्यूलेटर पर विंडोज निर्देशिका दोनों - मैं देख सकता हूं कि यह अनुकरणकर्ता फाइल एक्सप्लोरर का उपयोग कर रहा है), (बी) कि सीएलआर इसे लोड कर सकता है (पर्याप्त मेमोरी आदि है), (सी) कि सीएलआर तब मिल सकता है कि कौन से फ़ंक्शन मौजूद हैं (उपयोगी अगर मैं बेवकूफ से बाहर हो सकता हूं ' डीएलएल त्रुटि नहीं मिल सकता है)

मुझे गेट्स या वास्तव में किसी भी 'विंडोज मोबाइल' टीम को उनके द्वारा बनाए गए बकवास का उपयोग करने के लिए मजबूर करना अच्छा लगेगा।

0

मुझे एक ही समस्या है। मैंने WinCE डीएल निर्भरताओं को देखने के लिए Depends.exe का उपयोग किया, और यह डीबग डीएल पर निर्भर करता है। (MSVCR90D.dll) समस्या को हल करने के लिए मैंने एक रिलीज़ संस्करण संकलित किया, और निर्भरताओं की पुष्टि की, उसके बाद यह ठीक काम करता है।

मैं मदद करने के लिए

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