C#调用C++动态库的函数,要返回结构体类型的列表怎么做比较好?

szzgh 2009-11-09 10:31:45
C#调用C++动态库的函数,要返回结构体类型的列表怎么做比较好? 自己用C++封装了一个支持跨平台和多种数据库操作的库,现在想在C#调用这个库实现类似的功能。比如说列本机的数据源列表、列出所有表名、存储过程名或函数名、字段信息等,这些都是一个结构体类型的列表,怎么返回给C#使用。希望有高人可以指点一下
...全文
322 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
szzgh 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soaringbird 的回复:]
在C++里分配空间C#里使用好像会有谁来释放那块内存的问题。比较稳妥的是先预先得知结果里会有多少个元素,在c#里分配足够的内存,再把数组地址传递给C++函数,在此填充结构数组。
[/Quote]
非常感谢你的耐心指点,这种方法已在测试中,希望可以达到预期
szzgh 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soaringbird 的回复:]
在C++里分配空间C#里使用好像会有谁来释放那块内存的问题。比较稳妥的是先预先得知结果里会有多少个元素,在c#里分配足够的内存,再把数组地址传递给C++函数,在此填充结构数组。
[/Quote]
非常感谢你的耐心指点,这种方法已在测试中,希望可以达到预期
szzgh 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soaringbird 的回复:]
在C++里分配空间C#里使用好像会有谁来释放那块内存的问题。比较稳妥的是先预先得知结果里会有多少个元素,在c#里分配足够的内存,再把数组地址传递给C++函数,在此填充结构数组。
[/Quote]
非常感谢你的耐心指点,这种方法已在测试中,希望可以达到预期
gomoku 2009-11-09
  • 打赏
  • 举报
回复
为什么要作为返回值呢?

内存管理的有效方法就是一般谁分配,谁负责释放(结构化编程的要点之一是职责清晰)。
返回结构列表就意味着C++负责分配,而c#方负责释放。

为什么不采用C#传入一个数组,c++进行填充的方式来返回呢?

extern static bool GetDataSources( MyDataInfo[] buffer, ref int length );
soaringbird 2009-11-09
  • 打赏
  • 举报
回复
在C++里分配空间C#里使用好像会有谁来释放那块内存的问题。比较稳妥的是先预先得知结果里会有多少个元素,在c#里分配足够的内存,再把数组地址传递给C++函数,在此填充结构数组。
soaringbird 2009-11-09
  • 打赏
  • 举报
回复
把结果作为传出参数返回,c++中参数定义成void**,把数组的首地址赋给*参数,
c#中参数定义为ref void*,把*参数转换为相应的结构数组
szzgh 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 soaringbird 的回复:]
字符串数组或者结构体数组
[/Quote]
结构体数组试过了,走不通,从C#传递给C++的DLL是可以,但作为返回值返回给C#还搞不清楚
soaringbird 2009-11-09
  • 打赏
  • 举报
回复
字符串数组或者结构体数组

110,533

社区成员

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

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

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