C#调用返回C++指针的缓冲区,并释放

在C++的函数中new了一段内存
char *test(char* filename)
{
     new一段内存
}

void release(char *mm);
{
   delete一段内存
}


        [DllImport("test.dll", EntryPoint = "test", CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr test( string filename);
        [DllImport("test.dll", EntryPoint = "release", CallingConvention = CallingConvention.Cdecl)]
        public static extern void release(IntPtr sb);

        public static IntPtr GetPtr(string filename)
        {
            return test(filename);
        }



        static unsafe void Main(string[] args)
        {
            string sb = @"路径名";
            IntPtr re = XX.GetPtr(sb);
            string result = Marshal.PtrToStringAnsi(re);
            //释放非托管代码申请的内存
            XX.release(re);
            //内存已释放,所以打印结果为空
            Console.WriteLine(Marshal.PtrToStringAnsi(re));
            //result引用的对象是已释放的对象的副本,所以打印结果为所需结果
            Console.WriteLine(result);
            Console.ReadLine();
        }

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值