से सी डीएल को कॉल करना हाय मेरे पास एक ऐसे फ़ंक्शन के साथ एक डीएलएल है जिसे मुझे कॉल करने की आवश्यकता है। हस्ताक्षर है:सी ++, सी # और रूबी
const char* callMethod(const char* key, const char* inParams);
मैं गहरे लाल रंग का सब कुछ का उपयोग करते हैं ठीक काम करता है:
attach_function :callMethod, [:string, :string], :string
अगर मैं का उपयोग सी ++ या सी # मैं ढेर अतिप्रवाह प्राप्त करें!?
सी #:
[DllImport("DeviceHub.dll", CallingConvention = CallingConvention.Cdecl)]
private unsafe static extern IntPtr callMethod(
[MarshalAs(UnmanagedType.LPArray)] byte[] key,
[MarshalAs(UnmanagedType.LPArray)] byte[] inParams
);
System.Text.UTF8Encoding encoding = new UTF8Encoding();
IntPtr p = callMethod(encoding.GetBytes(key), encoding.GetBytes(args)); // <- stack overflow here
C++:
extern "C"
{
typedef DllImport const char* ( *pICFUNC) (const char*, const char*);
}
HINSTANCE hGetProcIDDLL = LoadLibrary(TEXT("C:\\JOAO\\Temp\\testedll\\Debug\\DeviceHub.dll"));
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),"callMethod");* pICFUNC callMethod;
callMethod = (pICFUNC) lpfnGetProcessID;
const char * ptr = callMethod("c", "{}");
मैं समारोह फोन करने के लिए विविधताओं के बहुत सारे की कोशिश की है: WINAPI, पास्कल, stdcall, fastcall, ... कुछ भी नहीं काम करता है।
डीएलएल मेरे द्वारा नहीं बनाया गया है और मेरे पास इसका कोई नियंत्रण नहीं है।
क्या कोई मुझे किसी भी सुझाव के साथ मदद कर सकता है !?
आप एक विचार करने के लिए मेरे प्रश्न पर एक नज़र डाल सकते हैं। यहाँ एक [कड़ी] [1] [1]: http://stackoverflow.com/questions/7153521/pass-multi-dimensional-array-from-managed-code-to-unmanaged-code –
सी # में दो पैरामीटर के प्रकारों के लिए आप 'स्ट्रिंग' का उपयोग क्यों नहीं करते? – Ove
मेरा विश्वास करो मैंने बहुत कुछ खोजा है ... :)। मैंने स्ट्रिंग्स के साथ भी कोशिश की है लेकिन सी # समस्याओं से बचने के लिए मैंने पुराने अच्छे सी ++ के साथ भी परीक्षण किया है और अभी भी ढेर ओवरफ्लो है! – Joao