本程序需要通过C#调用c++编的动态链接库,动态链接库里的函数又需要调用主程序的函数。在c++builder上调用这动态链接库能成功,但是用C#调用时 运行到int i = show(mydeleadd);行时,先调用add函数,a,b返回的值也正确,等add运行完后show(mydeleadd)报错“尝试读取或写入受保护的内存”;请高手指教。
主程序代码为:
 
        public delegate int deleadd(int i, int j);
       [DllImport("dll.dll", EntryPoint = "show", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, PreserveSig = true)]
       public static extern int show(deleadd i);        public int add(int a, int b)
        {
           MessageBox.Show ((a+b).ToString()) ;
           return 0;
        }        private void button2_Click(object sender, EventArgs e)
        {
          deleadd mydeleadd = new deleadd(add);
          int i = show(mydeleadd);
          MessageBox.Show(i.ToString());
        }
c++的DLL代码为
typedef int (*TFunPtr)(int ,int) ;
extern "C"
{
  int  __stdcall   __declspec(dllexport) show(TFunPtr callfunc)
  {
    return(callfunc(2,3));
  }
}