c#调C++接口?

Nick_Ngai 2020-12-11 12:55:33

c++SDK这样一个接口,返回的是字符串,该怎么调用?
...全文
7557 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2020-12-14
  • 打赏
  • 举报
回复
引用 14 楼 Nick_Ngai 的回复:
[StructLayout(LayoutKind.Sequential)] public struct ET_Buffer { public int Length; public IntPtr Data; }
传出结构体的话就用out ET_Buffer buffer传参. 注意C#这边结构体中成员类型与C++那边一致,前面说过,16位,32位等问题.
wanghui0380 2020-12-14
  • 打赏
  • 举报
回复
正常情况下直接写成ref ET_Buffer 即可,先试试这个。这个不行我们在来写intprt的版本 ps:和上次那帖子说法一样,用什么根据上下文推论。我们的写法取决于对方写法,不取决于那帖子帖子的那堆口水。那伙计在那帖子里一堆没用的口水,换这里,人家写代码的都直接告诉你用空指针返回
Nick_Ngai 2020-12-14
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Sequential)] public struct ET_Buffer { public int Length; public IntPtr Data; }
Nick_Ngai 2020-12-14
  • 打赏
  • 举报
回复
引用 11 楼 ziqi0716 的回复:
[quote=引用 10 楼 Nick_Ngai 的回复:][quote=引用 9 楼 ziqi0716 的回复:][quote=引用 7 楼 Nick_Ngai 的回复:][quote=引用 6 楼 ziqi0716 的回复:][quote=引用 3 楼 Nick_Ngai 的回复:][quote=引用 2 楼 ziqi0716 的回复:]明明是int,哪里的字符串?
ET_Buffer *pDongleInfo[/quote] 这叫引用,ET_Buffer定义是什么?char*?C#可以用StringBuilder.[/quote] [DllImport("sdk.dll", EntryPoint = "GetDongleInfo")] public static extern int GetDongleInfo(IntPtr handler, ref StringBuilder pDongleInfo); 这样吗? [/quote] ref不需要,stringbuilder本身就是引用[/quote] ET_Buffer 这个是个指针,怎么写? [/quote] 我当然知道是指针,关键是什么类型的指针啊?好比我说一个名字叫"ABC",你说,ABC到底是什么类对象的名字呢?不知道的话怎么传参数呢?[/quote] 返回的是结构体,但是那边说传入空指针就可以,输出后转换为结构体。
wanghui0380 2020-12-14
  • 打赏
  • 举报
回复
看你的行文,你应该有源代码 那么请把ET_Buffer 定义发出来。(一般在.h头里面定义的) 这东西是指针没错,但是调用要保持内存一致,定义一致。这个C#里也一样。 比如 XXX.A 没错,但是你要把XXX的type类型去掉变成统一的object。 那object里面可就没办法有A了(虽然他还是有A,不过类型不知道了,所以直接用就出不来) C++指针一样,虽然内存指向是OK的,但内存分布未知, 如果写XXXX->A ,那这个A到底取那里就未知了 所以,你第一步是找出ET_Buffer 定义
ziqi0716 2020-12-14
  • 打赏
  • 举报
回复
引用 10 楼 Nick_Ngai 的回复:
[quote=引用 9 楼 ziqi0716 的回复:][quote=引用 7 楼 Nick_Ngai 的回复:][quote=引用 6 楼 ziqi0716 的回复:][quote=引用 3 楼 Nick_Ngai 的回复:][quote=引用 2 楼 ziqi0716 的回复:]明明是int,哪里的字符串?
ET_Buffer *pDongleInfo[/quote] 这叫引用,ET_Buffer定义是什么?char*?C#可以用StringBuilder.[/quote] [DllImport("sdk.dll", EntryPoint = "GetDongleInfo")] public static extern int GetDongleInfo(IntPtr handler, ref StringBuilder pDongleInfo); 这样吗? [/quote] ref不需要,stringbuilder本身就是引用[/quote] ET_Buffer 这个是个指针,怎么写? [/quote] 我当然知道是指针,关键是什么类型的指针啊?好比我说一个名字叫"ABC",你说,ABC到底是什么类对象的名字呢?不知道的话怎么传参数呢?
Nick_Ngai 2020-12-12
  • 打赏
  • 举报
回复
引用 9 楼 ziqi0716 的回复:
[quote=引用 7 楼 Nick_Ngai 的回复:][quote=引用 6 楼 ziqi0716 的回复:][quote=引用 3 楼 Nick_Ngai 的回复:][quote=引用 2 楼 ziqi0716 的回复:]明明是int,哪里的字符串?
ET_Buffer *pDongleInfo[/quote] 这叫引用,ET_Buffer定义是什么?char*?C#可以用StringBuilder.[/quote] [DllImport("sdk.dll", EntryPoint = "GetDongleInfo")] public static extern int GetDongleInfo(IntPtr handler, ref StringBuilder pDongleInfo); 这样吗? [/quote] ref不需要,stringbuilder本身就是引用[/quote] ET_Buffer 这个是个指针,怎么写?
ziqi0716 2020-12-11
  • 打赏
  • 举报
回复
引用 7 楼 Nick_Ngai 的回复:
[quote=引用 6 楼 ziqi0716 的回复:][quote=引用 3 楼 Nick_Ngai 的回复:][quote=引用 2 楼 ziqi0716 的回复:]明明是int,哪里的字符串?
ET_Buffer *pDongleInfo[/quote] 这叫引用,ET_Buffer定义是什么?char*?C#可以用StringBuilder.[/quote] [DllImport("sdk.dll", EntryPoint = "GetDongleInfo")] public static extern int GetDongleInfo(IntPtr handler, ref StringBuilder pDongleInfo); 这样吗? [/quote] ref不需要,stringbuilder本身就是引用
Nick_Ngai 2020-12-11
  • 打赏
  • 举报
回复
IntPtr intPtr = IntPtr.Zero; System.Text.StringBuilder djson = new System.Text.StringBuilder(); int rst = SdkInvoke.GetDongleInfo(intPtr, ref djson); 调用这样?
Nick_Ngai 2020-12-11
  • 打赏
  • 举报
回复
引用 6 楼 ziqi0716 的回复:
[quote=引用 3 楼 Nick_Ngai 的回复:][quote=引用 2 楼 ziqi0716 的回复:]明明是int,哪里的字符串?
ET_Buffer *pDongleInfo[/quote] 这叫引用,ET_Buffer定义是什么?char*?C#可以用StringBuilder.[/quote] [DllImport("sdk.dll", EntryPoint = "GetDongleInfo")] public static extern int GetDongleInfo(IntPtr handler, ref StringBuilder pDongleInfo); 这样吗?
ziqi0716 2020-12-11
  • 打赏
  • 举报
回复
引用 3 楼 Nick_Ngai 的回复:
[quote=引用 2 楼 ziqi0716 的回复:]明明是int,哪里的字符串?
ET_Buffer *pDongleInfo[/quote] 这叫引用,ET_Buffer定义是什么?char*?C#可以用StringBuilder.
泡泡龙 2020-12-11
  • 打赏
  • 举报
回复
https://download.csdn.net/detail/cumtwys/7699425
Nick_Ngai 2020-12-11
  • 打赏
  • 举报
回复
引用 2 楼 ziqi0716 的回复:
明明是int,哪里的字符串?
ET_Buffer *pDongleInfo
ziqi0716 2020-12-11
  • 打赏
  • 举报
回复
明明是int,哪里的字符串?

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧