से रिवर्स PInvoke मैं वर्तमान में एक अप्रबंधित सी ++ ऐप से सी # डीएलएल से एक फ़ंक्शन कॉल करने का प्रयास कर रहा हूं।देशी सी ++
वेब और घंटे पर घंटों की खोज करने के बाद, मैंने पाया कि मेरे पास कुछ विकल्प हैं।
मैं COM, DllExport
का उपयोग कर सकता हूं, या प्रतिनिधि के साथ रिवर्स PInvoke का उपयोग कर सकते हैं। आखिरी बार मुझे सबसे ज्यादा आकर्षक लग रहा था, इसलिए एसओ खोजने के बाद मैंने here समाप्त कर दिया।
यह कहता है कि लेख दिखाता है कि रिवर्स PInvoke का उपयोग कैसे करें, लेकिन ऐसा लगता है कि C# कोड को पहले C++ Dll आयात करना होगा, इससे पहले कि इसका उपयोग किया जा सके।
मुझे पहले सी # एप चलाने के बिना, मेरे सी # डीएल कार्यों को कॉल करने के लिए सी ++ का उपयोग करने में सक्षम होना चाहिए।
शायद रिवर्स PInvoke ऐसा करने का तरीका नहीं है, लेकिन जब मैं निम्न स्तर की सामग्री की बात करता हूं तो मैं काफी अनुभवहीन हूं, इसलिए यह करने के तरीके पर कोई संकेतक या सुझाव बहुत अच्छा होगा।
कड़ी में कोड है
सी #
using System.Runtime.InteropServices;
public class foo
{
public delegate void callback(string str);
public static void callee(string str)
{
System.Console.WriteLine("Managed: " +str);
}
public static int Main()
{
caller("Hello World!", 10, new callback(foo.callee));
return 0;
}
[DllImport("nat.dll",CallingConvention=CallingConvention.StdCall)]
public static extern void caller(string str, int count, callback call);
}
सी ++
#include <stdio.h>
#include <string.h>
typedef void (__stdcall *callback)(wchar_t * str);
extern "C" __declspec(dllexport) void __stdcall caller(wchar_t * input, int count, callback call)
{
for(int i = 0; i < count; i++)
{
call(input);
}
}
सरल UnmanagedExports है: https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports –
, क्या आप क्या करना चाहते C++ से एक सी # dll की मेजबानी है, तो आप दिखती थी [ यहाँ] [1]? [1]: http://stackoverflow.com/questions/3799907/using-c-sharp-dll-in-project-c – plinth