char**相当于字符串数组。
char*相当于字符串。
你可以用string接受,并且用ToCharArray()装入数组。
char*相当于字符串。
你可以用string接受,并且用ToCharArray()装入数组。
解决方案 »
- C#事务问题:我有一个写文件方法CreateFile()和一个上传文件方法UpLoadMyFile()我如何让这两个方法同时完成,或同事回滚啊?就像数据库里的
- 代码通过,便执行的时候 赋值不成功,原因在哪里?
- 颜色转换的简单问题
- Application1.fm.button1不能访问,因为它受保护级别限制~~郁闷啊
- 请问下面的asp代码改成c#怎么写?急!帮帮忙啊!各位大哥
- 请教:如何将Excel文档显示在一个Panel上
- 《C Sharp Windows Forms 程序设计》这本书如何?
- 如何删除data sources
- 我从网上下载的《C#完全手册》好像是中国人写的,与书店里见到的不一样?是不是?
- 在C#如何实现实现C++中的SetRop2(hdc,R2_XORPEN),up有分
- form中的listview控件
- 请问怎样在窗体中把汉字自动转换成拼音缩写呢?
不会吧,你好好看看你的C程序吧,是不是平栈了,用string接受应该是没有任何问题的,还有,你的char*里面有数据?直接用Marshal.Copy就行了吧
2、办法一,循环赋值,根据数据长度循环将指针数据赋值到byte[]各元素;
3、办法二,将char*强制转换为IntPtr,使用Marshal.Copy将IntPtr指向的数据拷贝到byte[];
4、办法三,如果是从c编写的api中获取数据,并且api参数为一个指针,dll向指针写入数据,那么可以尝试直接使用固定后的byte[]作为参数传入api,或者获取byte[]的fixed指针作为参数传入api,使dll直接将数据写入byte[],省掉一次拷贝。
5、结构体也好,结构体中有指针也好,将一个结构体作为一个数组也好,其实都是数据内存分布的表现形式,不用拘泥于一一对应,可以传送并在传送后转为需要的形式即可。
IntPtr data = new IntPtr(pData);
byte[] buff = new byte[nDataLength];
Marshal.Copy(data, buff, 0, nDataLength);
再不行IntPtr
------------------
当调用Win32的DLL时,如果接口方法的参数中有字符串的输出(LPSTR),就应该使用StringBuilder这个类型,
此时,定义的StringBuilder变量就必须指定大小(为变量初始化内存空间),否则,
当DLL内部对变量空间赋值的时候会失败,甚至出现意外,因为外部DLL并不支持StringBuilder这样的数据操作行为。