社区
C#
帖子详情
C#下string转换成char*再给DLL作参数
wangzhihongji
2015-03-28 08:20:02
如题。。。。。
之前的那个帖子结了。。。
怎么把这里的char[]变成char*
...全文
179
6
打赏
收藏
C#下string转换成char*再给DLL作参数
如题。。。。。 之前的那个帖子结了。。。 怎么把这里的char[]变成char*
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wjq
2015-03-29
打赏
举报
回复
如果是后者,首先用System.Text.Encoding.ASCII.GetBytes把你的char[]转为byte[], 然后用Marshal.AllocHGlobal申请byte[]同样大小的非托管内存块 接着用Marshal.Copy把你的托管byte[]拷贝到刚申请的IntPtr指向的非托管内存块。 这个IntPtr就是和C/C++等价的char*了。 最后记得用Marshal.FreeHGlobal释放你创建的非托管内存块。 声明为byte*或者IntPtr,不要用char*,.NET的托管char和C/C++的char是不一样的。前者是unicode的字符,后者是单个字节byte的别名
本拉灯
2015-03-28
打赏
举报
回复
给你一个参考,这是我以前写加密狗时用的 这是C++的 // 4. 生成用户 ID EXTERN_C int WINAPI RY2_GenUID(int handle, DWORD* uid, char* seed, int isProtect); // 输入: // handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 // uid 输出参数,生成的用户 ID 从此参数返回 // seed 用户给出的用于生成用户 ID 的种子,这是一个最大长度可以是 64 个字节的字符串 // isProtect 用来指定此 Rockey2 是否可写,0 是可写,1 是不可写 #define ROCKEY2_DISABLE_WRITE_PROTECT 0 #define ROCKEY2_ENSABLE_WRITE_PROTECT 1 // 返回: // 返回的是一个错误编码,具体含义请看下面的错误编码部分。 // ==================================================================== // 5. 读取加密锁内容 EXTERN_C int WINAPI RY2_Read(int handle, int block_index, char* buffer512); // 输入: // handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 // block_index 块索引,指明要读取的是哪1个块,取值为(0-4) // buffer512 读出块的缓冲区,因为每个块的长度固定为 512 个字节,所以这个 // buffer 的大小至少是 512 个字节 // 返回: // 返回的是一个错误编码,具体含义请看下面的错误编码部分。 // ==================================================================== // 6. 写入加密锁内容 EXTERN_C int WINAPI RY2_Write(int handle, int block_index, char* buffer512); 这是C#定义的 // 5. 读取加密锁内容 [DllImport("Rockey2.dll", EntryPoint = "RY2_Read", SetLastError = true)] public static extern int Read(int handle, int block_index, StringBuilder buffer512); // 输入: // handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 // block_index 块索引,指明要读取的是哪1个块,取值为(0-4) // buffer512 读出块的缓冲区,因为每个块的长度固定为 512 个字节,所以这个 // buffer 的大小至少是 512 个字节 // 返回: // 返回的是一个错误编码,具体含义请看下面的错误编码部分。 // 6. 写入加密锁内容 [DllImport("Rockey2.dll", EntryPoint = "RY2_Write")] public static extern int Write(int handle, int block_index, string buffer512);
本拉灯
2015-03-28
打赏
举报
回复
楼主呀,你试过用string没? C++里如果用char* 那C#里就能用string或StringBuider来表示他的参数。
Regan-lin
2015-03-28
打赏
举报
回复
你这样*xxx是搞什么,你不用char[]来接受,你用*xxx来干什么的
娃都会打酱油了
2015-03-28
打赏
举报
回复
不用再发了,会有人来回复你的,不过今天是周六,估计要周一才有人来回复你
wangzhihongji
2015-03-28
打赏
举报
回复
如果你想对取地址符号的话,它会提示你无法获取托管类型的地址。。。
C#
中
string
转
char
*
C#
中
string
转
char
*
C#
将
String
传入C++的
char
*
C++的函数
参数
列表中包含一个
char
*的输出型
参数
,然而在
C#
调用该
dll
时候,会自动将函数的中的
char
*
参数
“翻译”为sbyte*, 使用了各种方法都不能调用函数,主要是不能合适的转换为sbyte*。 1、【项目】->...
C#
调用c++
dll
中
char
**数据结构转换
1.
作
为输入
参数
转为
char
[],通过Encoding类对这个
string
[]进行编码后得到的一个
char
[] 2.
作
为输出
参数
转为byte[],通过Encoding类对这个byte[]进行解码,得到字符串 例子: int __stdcall SP_...
c#
调用c库
dll
遇到
char
*转
string
的解决办法
最近由于有个未知的设备需要用到modbus通讯协议,底层需要与PLC通讯,坤跌,PLC啥型号也不清楚封在里面不能...撸代码的过程中,遇到调用c 库的
char
*转
c#
的
string
多次不成功的情况,各种冒框啊,折腾了大半天才算解决...
2022-08-27
C#
调用C++
DLL
获取
char
*的常用封装技巧
C#
调用C++
dll
获取
char
*的常用封装技巧
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章