callback von native C/C++ DLl in C# code
-
Hi!
Ich habe schon einen Menge bezüglich dieses Thema gegoogelt und auch gefunden.
Ich bin in der Lage einen Callback von meiner unmanaged native DLL in den C# Code zu machen.typedef int (__stdcall * ProgressCallback)(int); ProgressCallback progressCall;
extern "C" __declspec(dllexport) void __stdcall Handle (ProgressCallback progressCallback) { if (progressCallback) { // save the Callback reference pointer progressCall = progressCallback; } } int __cdecl __ns1__UnlockConnector(struct soap *,class ns1__UnlockConnectorRequest *req, class ns1__UnlockConnectorResponse *resp) { UnlockConnectorRequest.Enqueue(*req); //StructUnlockConnector.connectorId = req->connectorId; if(progressCall(0) == 1) resp->status = ns1__UnlockStatus__Accepted; else resp->status = ns1__UnlockStatus__Rejected; return SOAP_OK; }
Allerdings würde ich gerne anstatt eines (int) das
class ns1__UnlockConnectorRequest *req
Object dem Callback mitgeben.
Mein C# Code dazu
class Program { [UnmanagedFunctionPointer(CallingConvention.StdCall)] public delegate int ProgressCallback(int value); [DllImport("ChargePointServerDll.dll")] public static extern uint StartChargePoint(); [DllImport("ChargePointServerDll.dll")] public static extern void Handle([MarshalAs(UnmanagedType.FunctionPtr)] ProgressCallback callbackPointer); static void Main(string[] args) { ProgressCallback callback = (value) => SoapRequester(value); // Function Pointer an DLL uebergeben Handle(callback); StartChargePoint(); } static int SoapRequester(int type) { switch (type) { case 0: Console.WriteLine("UnlockConnector"); //not implemented yet return 1;
Ich würde halt anstatt des (int type) mein Klassen Object zurück bekommen.
Da ich damit relativ wenig Erfahrung habe bitte ich um kompetente Hilfe ob das möglich ist undw enn ja wie!?Danke und LG
-
Ev. hilft dir das Bsp. von mir aus einem anderen Thread weiter:
http://www.c-plusplus.net/forum/p1716489#1716489