c#调用dll结构体怎么只返回一组数据
type tpumpings1 = recordtime, proppant,
liquidrate,
liquidvolumea,
proppantmassa, fracturehalf,
fracturew: double;
end;
arrpump = array of tpumpings1;这是delphi写的dll的结构体
function teststring(out data1:arrpump;out datastrv:variant): integer; stdcall;
var
i: integer;
datastr: arraystring;
begin
result := 0;
setlength(data1, 5);
for i := 0 to 4 do
begin
data1[i].time := (i + 1) * 10;
data1[i].proppant := (i + 1) * 9;
data1[i].liquidrate := (i + 1) * 8;
data1[i].liquidvolumea := (i + 1) * 7;
data1[i].proppantmassa := (i + 1) * 6;
data1[i].fracturehalf := (i + 1) * 5;
data1[i].fracturew := (i + 1) * 4;
end;该函数的部分代码。。。
结果只返回一组,应该是5组数据啊,求大神指教 dll c# delphi --------------------编程问答-------------------- 从代码看,data1.Length无论怎样都是5吧 --------------------编程问答-------------------- 没看出哪里不对,调试下看看 --------------------编程问答-------------------- 但是出来之后就是1啊。。。 --------------------编程问答--------------------
public partial class Form1 : Form
{
[StructLayout(LayoutKind.Sequential)]
public struct tpumpings1
{
[MarshalAs(UnmanagedType.R8)]
public double time;
[MarshalAs(UnmanagedType.R8)]
public double proppant;
[MarshalAs(UnmanagedType.R8)]
public double liquidrate;
[MarshalAs(UnmanagedType.R8)]
public double liquidvolumea;
[MarshalAs(UnmanagedType.R8)]
public double proppantmassa;
[MarshalAs(UnmanagedType.R8)]
public double fracturehalf;
[MarshalAs(UnmanagedType.R8)]
public double fracturew;
}
[DllImport("recordtest.dll")]
public static extern int teststring(out tpumpings1[] data1, out object datastrv);
public Form1()
{
InitializeComponent();
}
private void buttonClick_Click(object sender, EventArgs e)
{
tpumpings1[] data1= new tpumpings1[5];
object aa;
if (teststring(out data1, out aa) == 1)
{
int a = data1.Length;
MessageBox.Show("调用成功!"+a+"");
}
}
}[code=csharp]
--------------------编程问答-------------------- 用byte[]
然后序列化 --------------------编程问答--------------------
再详细点儿么。。。 --------------------编程问答-------------------- 封装类型。序列化成byte[] 比如 前几位表示什么 中间几位表示什么 后面几位表示什么
c++里直接用
然后c++返回的时候也按这个格式
c#反序列化就就按这个格式分割
这种方法应该不会错了
--------------------编程问答--------------------
你觉得问题是出在这个dll的函数过程中嘛?这是个delphi编写的dll。是不是跟我的c#调用过程关系不大? --------------------编程问答--------------------
如果不能改dll
那你就用byte[]接收
然后手动解析试试
看是不是都返回了
如果少返回 那就是你传参数和他的没对齐
你可以找找百度找找c#和delphi对齐方式 --------------------编程问答-------------------- 谢谢,我试试 --------------------编程问答-------------------- 继续求助。。。 --------------------编程问答-------------------- 继续求助求助
补充:.NET技术 , C#