उम्मीद है कि यह एक दिमागी आसान सवाल है, लेकिन यह सी ++ के साथ विशेषज्ञता की कमी दिखाता है। मैं एक सी # प्रोग्रामर हूं, और मैंने अतीत में पी/Invoke के साथ अन्य लोगों के सी ++/सी डीएलएस के साथ व्यापक काम किया है। हालांकि, इस बार मैंने खुद को एक रैपर सी ++ डीएल (अप्रबंधित) लिखने का फैसला किया है, और फिर मैं अपने रैपर डीएल को सी # से बुला रहा हूं।सी ++ फ़ंक्शन कैसे सेट अप करें ताकि इसका उपयोग पी/इनवॉक द्वारा किया जा सके?
समस्या जो मैं तुरंत चल रहा हूं वह यह है कि मैं एक सी ++ फ़ंक्शन को परिभाषित करने में असमर्थ हूं जो पी/इनवॉक द्वारा पाया जा सकता है। मैं क्या इस के लिए वाक्य रचना है पता नहीं, लेकिन यहाँ मैं अब तक क्या कोशिश कर रहा हूँ है:
extern bool __cdecl TestFunc()
{
return true;
}
मूल रूप से मैं बस यह था, लेकिन यह या तो काम नहीं किया:
bool TestFunc()
{
return true;
}
और तो सी # तरफ, मेरे पास है:
public const string InterfaceLibrary = @"Plugins\TestDLL.dll";
[DllImport(InterfaceLibrary, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "TestFunc"), SuppressUnmanagedCodeSecurity]
internal static extern bool TestFunc();
सब कुछ संकलित, लेकिन जब मैं इस सी # पी निष्पादित/कॉल आह्वान, मैं एक System.EntryPointNotFoundException मिलती है: DLL में 'TestFunc' 'नामक एक प्रवेश बिंदु खोजने में असमर्थ प्लगइन्स \ TestDLL.dll '।
निश्चित रूप से यह C++ अंत में कुछ अविश्वसनीय रूप से सरल होना चाहिए कि मुझे सिंटैक्स नहीं पता है।
बिल्कुल सही, यह किया! मैंने अतीत में बाहरी "सी" होने का भी प्रयास किया था, लेकिन यह काम नहीं किया। यह तब तक विफल रहता है जब तक _declspec (dllexport) को जोड़ा नहीं जाता है। – x4000