加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Dll使用数组将C导入C#

发布时间:2020-12-14 01:42:20 所属栏目:Windows 来源:网络整理
导读:我已经获得了将一些库例程移植到C#的任务,因此我们的其他应用程序开发人员可以访问它,但我不知道如何声明变量以便它们正确地进入例程. 问题是,当我逐步读入带有C代码的输入时,我得到所有偏斜的值 尝试使用: double[] Par = { 8,16,8,0.61,0.00635,... }; //
我已经获得了将一些库例程移植到C#的任务,因此我们的其他应用程序开发人员可以访问它,但我不知道如何声明变量以便它们正确地进入例程.

问题是,当我逐步读入带有C代码的输入时,我得到所有偏斜的值

尝试使用:

double[] Par = { 8,16,8,0.61,0.00635,... }; // 29 variables
double[] Inlet = { 22.18,43.31,1.13,2.81,0.43 }; // 5 variables
double[] Outlet = { 0,0 }; // placeholder for 6 variables
SteadyFor(ref Par,ref Inlet,ref Outlet,FileIn,FileOut);

DLL导入

[DllImport(MODELAPP,EntryPoint = "SteadyFor",ExactSpelling = false)]
public static extern int SteadyFor(
  ref double[] par,ref double[] inlet,ref double[] outlet,[MarshalAs(UnmanagedType.LPStr)] string input,[MarshalAs(UnmanagedType.LPStr)] string output);

C文件:

extern "C" int SteadyFor(double Par[],double Inlet[],double Outlet[],char* FileIn,char* FileOut)
{
  int n = (int)Par[0]; // Actual Reading: [0]
  int nt = (int)Par[1]; // Actual Reading: [0]
  int pass = (int)Par[2]; // Actual Reading: [0]
  double l = Par[3]; // Actual Reading: [2.9581223236733198e+174]
  double rTube = Par[4]; // Actual Reading: [2.121995790965e-314#DEN]
  double tTube = Par[5]; // Actual Reading: [5.432309224896e-312#DEN]
  double pl = Par[6]; // Actual Reading: [1.0253217546256438e-267]
  double pt = Par[7]; // Actual Reading: [4.60629e-308]
  // ...
}

显然,我得到的值都是错的 – 几乎就像非初始化的内存.

有人能告诉我我做错了什么以及如何解决它?

问候,

?乔

删除声明中的“ref”关键字,它们不正确. C代码没有与AV崩溃有点神秘.

字符串上的[MarshalAs]属性是不必要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读