C#调用C++动态库的函数,要返回结构体类型的列表怎么做比较好? 自己用C++封装了一个支持跨平台和多种数据库操作的库,现在想在C#调用这个库实现类似的功能。比如说列本机的数据源列表、列出所有表名、存储过程名或函数名、字段信息等,这些都是一个结构体类型的列表,怎么返回给C#使用。希望有高人可以指点一下

解决方案 »

  1.   

    结构体数组试过了,走不通,从C#传递给C++的DLL是可以,但作为返回值返回给C#还搞不清楚
      

  2.   

    把结果作为传出参数返回,c++中参数定义成void**,把数组的首地址赋给*参数,
    c#中参数定义为ref void*,把*参数转换为相应的结构数组
      

  3.   

    在C++里分配空间C#里使用好像会有谁来释放那块内存的问题。比较稳妥的是先预先得知结果里会有多少个元素,在c#里分配足够的内存,再把数组地址传递给C++函数,在此填充结构数组。
      

  4.   

    为什么要作为返回值呢?内存管理的有效方法就是一般谁分配,谁负责释放(结构化编程的要点之一是职责清晰)。
    返回结构列表就意味着C++负责分配,而c#方负责释放。为什么不采用C#传入一个数组,c++进行填充的方式来返回呢?extern static bool GetDataSources( MyDataInfo[] buffer, ref int length );