c#调用C++的动态链接库dll,形参相关说明[const char */char*/int]

在C#项目中调用C++生成的dll相关参数定义调用

C++声明的如下

  • 形参有char *const char *int
  • 返回类型有char *int
extern "C" {
#endif

#if defined(_WIN32)
#   define __export         __declspec(dllexport)
#elif defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#   define __export         __attribute__((visibility("default")))
#else
#   define __export         
#endif
	__export char *	test1(int length, const char * param);
	__export int	test2(char * cResult);
#ifdef __cplusplus
}
#endif

C#中调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace demo
{
    using System.Runtime.InteropServices;

    class Program
    {
        [DllImport("hello", EntryPoint = "test1", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr test1(int length, string param);

        [DllImport("hello", EntryPoint = "test2", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int test2(IntPtr result);
        static void Main(string[] args)
        {
            string param = "小路人";
            int length = 6;
            IntPtr ipName = test1(length,param);
            string ResName = Marshal.PtrToStringAnsi(ipName);
            Console.WriteLine("test1\t" + ResName);
           
            IntPtr ipName2 = Marshal.AllocHGlobal(256); ;
            int rv = test2(ipName2);
            ResName = Marshal.PtrToStringAnsi(ipName2);
            Console.WriteLine("test2\t" + ResName);

            Console.ReadKey();
        }
    }
}

示例程序

总结

C++C#释义
intint整型 数字
char *IntPtr字符指针
const char *string字符串
  • IntPtr转换为string–>调用Marshal.PtrToStringAnsi()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值