C \ # C 에 의뢰 한 함수 포인터 호출 문제

1323 단어 함수 포인터
C \ # C 에 의뢰 한 함수 포인터 호출 문제 C 코드 는 다음 과 같 습 니 다.
#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);

    }


 

좋은 웹페이지 즐겨찾기