C \ # C 에 의뢰 한 함수 포인터 호출 문제
1323 단어 함수 포인터
#include "stdio.h"
__declspec(dllexport) int Call(int (*qq)(int num),char * str){ printf(str); return qq(123);}
여러 번 의 검증 을 통 해 C \ # 에서 C 에 의뢰 한 함수 지침 을 발 견 했 습 니 다. 의뢰 가 파 라 메 터 를 가지 고 있 지 않 으 면 성공 적 으로 실 행 될 수 있 습 니 다. 그러나 의뢰 일대 파 라 메 터 는 int 파라미터 든 string 파라미터 든 다른 파 라 메 터 든 '보 호 된 메모리 읽 기 또는 쓰기 시도' 라 는 오 류 를 보고 하고 하루 만 에 해결 방법 을 찾 았 습 니 다.C \ # 의 위탁 성명 에 [Unmanaged Function Pointer (Calling Convention. Cdecl)] 를 추가 하면 다음 과 같이 정확하게 호출 됩 니 다.
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate int MyDeg(int num);
class Program
{
static void Main(string[] args)
{
try
{
MyDeg myd = new MyDeg(FF);
Console.WriteLine(Call(myd, "helloworld"));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static int FF(int num)
{
Console.WriteLine(num);
return num + 1;
}
[DllImport("my.dll", EntryPoint = "Call")]
public extern static int Call(MyDeg mm ,string str);
}