से कार्यों का निर्यात करना मैंने सी ++ डीएल बनाया है जिसे मैं सी # कोड से कॉल करना चाहता हूं। मैं एक समारोह को कॉल करने में सक्षम हूं, लेकिन दूसरा एक अपवाद फेंकता है जब सी # कोड डीएल लोड करने का प्रयास करता है।सी ++ डीएल से सी # पी/
हेडर कुछ इस तरह दिखता है: (? क्या foo = foo नाम क्षेत्र में क्या मतलब है)
extern "C" __declspec(dllexport) BOOL Install();
extern "C" __declspec(dllexport) BOOL PPPConnect();
यह थोड़ा भ्रमित निर्यात मेज के साथ एक dll का उत्पादन:
File Type: DLL
Section contains the following exports for PPPManager.dll
00000000 characteristics
499F44F0 time date stamp Fri Feb 20 16:04:00 2009
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 000078E4 Install = Install
2 1 000079DC PPPConnect = PPPConnect
मेरे पी/घोषणाओं को शामिल करें इस तरह दिखते हैं:
[DllImport("PPPManager.dll")]
private static extern bool Install();
[DllImport("PPPManager.dll")]
private static extern bool PPPConnect();
कोई अपवाद के साथ रिटर्न इंस्टॉल करने के लिए कॉल, लेकिन जब मैं PPPConnec को कॉल करता हूं टी, मुझे एक MissingMethodException मिलता है - "PInvoke DLL 'PPPManager.dll' में" एंट्री पॉइंट 'PPPConnect' नहीं मिल रहा है। "
मैंने इंस्टॉलेशन फ़ंक्शन घोषणा से बाहरी और declspec निर्देशों को हटाने का प्रयास किया है, ताकि पीपीपीकनेक्ट एकमात्र फ़ंक्शन निर्यात किया जा सके, और यह अभी भी मुझे PPPConnect को कॉल करने नहीं देता है।
मैंने ऑर्डिनल द्वारा DllImport करने का भी प्रयास किया है; यह नाम के आधार पर कॉल करने के समान परिणाम देता है - रिटर्न इंस्टॉल करें, लेकिन पीपीपीकनेक्ट अपवाद फेंकता है "एंट्री पॉइंट नहीं मिला" # 2 '... "।
इंटरॉप लॉग देता है:
[pinvokeimpl][preservesig]
bool invivodata.Common.System.IPAQUtils::Install();
BOOLEAN (I1_WINBOOL_VAL) Install();
JIT ERROR FOR PINVOKE METHOD (Managed -> Native):
[pinvokeimpl][preservesig]
bool invivodata.Common.System.IPAQUtils::PPPConnect();
BOOLEAN (I1_WINBOOL_VAL) PPPConnect();
इस विशेषज्ञता के अपने क्षेत्र के बाहर अच्छी तरह से है, इसलिए किसी भी सुझाव या विचार स्वागत किया जाएगा।
धन्यवाद, पॉल
संपादित करें: ऐसा नहीं है कि इस कोड काम करता है पता चला है; समस्या नवीनतम डीएल के साथ डिवाइस पर प्रचारित नहीं किया जा रहा था। डी 'ओह!
मैं इस इंटरॉप लॉग कभी नहीं सुना गया है - कैसे एक/कि देखने सक्षम है? – Charlie
http://blogs.msdn.com/netcfteam/archive/2005/07/24/442609.aspx मैंने अभी इस समस्या को आजमाने और डीबग करने के लिए इसका उपयोग करना शुरू किया, लेकिन ऐसा लगता है जैसे यह मुझे बहुत बचा सकता MissingMethodExceptions को डिबग करने का समय। – Symmetric