मैं एक डीएलएल बनाने की कोशिश कर रहा हूं जो "GetName" नामक फ़ंक्शन को निर्यात करता है। मैं चाहता हूं कि अन्य कोड उलझन वाले फ़ंक्शन नाम को जानने के बिना इस फ़ंक्शन को कॉल करने में सक्षम हों।मैं अपने डीएलएल के निर्यात किए गए फ़ंक्शन के नाम-उलझन को कैसे रोकूं?
मेरे हेडर फाइल इस तरह दिखता है:
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
EXPORT TCHAR * CALLBACK GetName();
मेरे कोड इस तरह दिखता है:
#include <windows.h>
#include "PluginOne.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
EXPORT TCHAR * CALLBACK GetName()
{
return TEXT("Test Name");
}
जब मैं निर्माण, DLL अभी भी नाम के साथ समारोह का निर्यात करता है: "_GetName @ 0" ।
मैं क्या गलत कर रहा हूं?
अरे शांत यह वास्तव में मैं लगभग क्या जरूरत है। अब क्या होगा यदि मैं इसे दूसरी तरफ चाहता हूं? मेरे पास सी फ़ंक्शन है, सी ++ सदस्य फ़ंक्शन (vtable, कॉलिंग सम्मेलन सभी को पूरा करने के लिए पूरी तरह से ठीक है), लेकिन संकलक के आंकड़े इसका नाम उलझन में होना चाहिए। – Pyjong
हां, सी और सी ++ अलग-अलग नाम सजावट नियमों का उपयोग करते हैं। जो कुछ आप पूछ रहे हैं उसे करने के लिए आपको रैपर बनाने की आवश्यकता है जो सी ++ वर्ग सदस्य – Dewfy
से सी फ़ंक्शन का आह्वान करेगा। एडीईएफ फ़ाइल नाम मैंगलिंग को अक्षम करने का एकमात्र तरीका है। 'बाहरी "सी" 'अभी भी नाम सजावट का उपयोग करेगा, सिर्फ सी ++ की आवश्यकता के रूप में वर्बोज़ के रूप में नहीं। – IInspectable