2017-02-28 4 views
1

JSON 문자열을 매개 변수로 가져 오는 C++ dll에서 메서드를 호출하려고합니다. json 형식 문자열에 포함 된 매개 변수 중 하나는 메서드가 호출 될 때 호출되어야하는 콜백 함수의 주소를 나타내는 부호없는 int입니다. 그것은C에서 메서드 포인터를 C++ 메서드에 정수 매개 변수로 보내기

Json::Value jsval; 
jsval["cmd"] = "logon"; 
jsval["Arg"]["IP"] = szIP; 
jsval["Arg"]["PORT"] = nPort; 
jsval["Arg"]["CALLBACK"] = (unsigned int)TheMsgCallback; 
Json::FastWriter writer; 
std::string sender = writer.write(jsval); 
JScmd((char*)sender.c_str()) 

그리고 여기

Delegate callbackDelegate = new Action<int, IntPtr, ulong, int, int>(messageCallback); 
IntPtr p = Marshal.GetFunctionPointerForDelegate(callbackDelegate); 
string s = Converter.Serialize(new loginRequest() { Arg = new ArgParam() { IP = "10.0.0.121", PORT = 7020, CALLBACK = (uint)p } }); 
JScmd(s); 

문제는 내가 C#에서 동일한 작업을 수행하려고 할 때 나는 C#에서 동일한 작업을 수행하려고하는 방법이다 : 여기가 C++에서 호출되는 방식입니다

Marshal.GetFunctionPointerForDelegate 일을, 나는이 라인 상에 에로을하지 않았다 당신은 알려 주시기 바랍니다이 문제를 해결하기 위해 어떤 제안이있는 경우

말한다 (210)는 지정된 형식은 제네릭 형식 정의

이 아니어야합니다.

답변

1

이 시도 :

public delegate void MyDelegate(int i, IntPtr j, ulong k, int l, int m); 
... 
MyDelegate callbackDelegate = new MyDelegate(messageCallback); 
IntPtr p = Marshal.GetFunctionPointerForDelegate(callbackDelegate);