delphi编写的COM组件,输出数据结构为Variant,如何在.NET中接收输出的数据结构(100分)

  • 主题发起人 主题发起人 zhener
  • 开始时间 开始时间
Z

zhener

Unregistered / Unconfirmed
GUEST, unregistred user!
具体代码如下:
function TDMMobile.Get_Story_Section(
const ServerCode: WideString): OleVariant;
var sqlstr:string;
begin
sqlstr := 'Select * from Table_aa ';
OpenData(ADOQuery1, sqlstr);
DataSetProvider1.DataSet := ADOQuery1;
Result := DataSetProvider1.Data;
end;
输出的结果应该是:
1001 cs1 1 NULL 1 1
1001 cs2 2 NULL 2 3
1001 cs3 3 NULL 4 6
在.net中的调用代码如下:
private void Button1_Click(object sender, System.EventArgs e)
{
PrjMobileCOM.DMMobileClass MyMobileCom= new PrjMobileCOM.DMMobileClass();
Object MyOjb=null;
MyOjb = MyMobileCom.Get_Story_Section("1001");
this.DataGrid1.DataSource = MyOjb;
//this.DataGrid1.DataSource = MyMobileCom.Get_Story_Section("1001");
DataGrid1.DataBind();
}
}
但在.net中,接收却只有一列,显示结果如下:
Item
150
25
224
189
1
0
0
0
24
0
0
0
6
0
3
0
0
0
3
0
0
0
169
0
10
83
101
114
118
101
114
67
111
100
101
1
0
73
0
0
0
1
0
5
87
73
68
84
72
4
0
1
0
10
0
0
0
12
83
101
99
116
105
111
110
84
105
116
108
101
1
0
73
0
0
0
1
0
5
87
73
68
84
72
4
0
1
0
50
0
0
0
14
67
117
114
114
101
110
116
83
101
99
116
105
111
110
4
0
1
0
0
0
0
0
11
83
101
99
116
105
111
110
80
97
103
101
4
0
1
0
0
0
0
0
8
80
97
103
101
70
114
111
109
4
0
1
0
0
0
0
0
6
80
97
103
101
84
111
4
0
1
0
0
0
0
0
0
0
0
64
0
4
49
48
48
49
3
99
115
49
1
0
0
0
1
0
0
0
1
0
0
0
0
64
0
4
49
48
48
49
3
99
115
50
2
0
0
0
2
0
0
0
3
0
0
0
0
64
0
4
49
48
48
49
3
99
115
51
3
0
0
0
4
0
0
0
6
0
0
0
 
我不会,顶
 
你输出的结果是Delphi中的ClientDataSet定义的Data类型,好像是2进制的吧。在.net中不认是很正常的~。要么你自己做翻译,要么就换一种输出的数据类型
 
我现在用n个数组变量代替了要输出的n列,但是这样太不灵活,一旦数据结构发生变化,代码都要跟着变,有没有更好的办法解决这个问题?
 
有谁有这方面的经验,交流一下吗!
 
各位大侠难道都没有更好的办法了吗?
 
算了,即使没有正确的答案,也收不回我的积分,还是结贴吧!
 
后退
顶部