C# 调用C++ dll传入 char*参数时候的注意点

C# 调用C++ dll传入 char*参数时候的注意点

在搞adb的源码的时候希望能修改一下adb.exe的源码给编译成dll给自己使用,
先说下adb的一些基本的运行原理吧。当使用adb去连接模拟器或者手机端的时候adb会先去检测自己的服务有没有开启,如果没有开启就重新启动一个adb.exe然后传入参数fork-server server来启动socket服务来和其他端通讯,也就是说你发命令的exe和服务端的exe不是同一个所以如果直接修改为dll的话就不能吧自己再启动一次作为服务端了,所以这里在它启动服务的地方修改启动exe的路径为另一个adb.exe作为服务端通讯,然后把自己这个编译为dll提供调用,然后就需要在C#调用的 时候传入另一个exe的路径。

  1. 当c导出函数参数为 char * 的时候C# 可以用string 和StringBuilder。传入都是没问题的,不过这里有个非常要注意的点,因为C#里面你new出来的 变量的地址其实不是一直固定的,也就是说当你传入给string和StringBuilder给C的导出函数的时候,你必须在这个函数里面把这个char * 用好,不然如果用 另一个const char * newstring 去指向上面的地址的时候,等你下次使用这个newstring 的时候 会发现里面内容已经不可描述,所以关键就是在C里面拿到C# 传入的变量的时候要么直接使用,要么在C这边new 一个空间去保存这个内容,用C里面的指针指向这个新的空间,不然等你下次使用 C#里面的变量实际地址就已经变了。

你可能感兴趣的:(经验问题,C#)