zx_billy 2019-07-11 22:29 采纳率: 50%
浏览 467
已结题

C#获取C dll函数内部运行参数

在做SWMM二次开发的时候,采用C#封装界面调用C dll,现在我想调用swmm_run函数,实时获取内部elapsedTime这个运行参数来在WPF界面上更新进度条,不知道应该怎样调用?

int DLLEXPORT  swmm_run(char* f1, char* f2, char* f3)
{
    long newHour, oldHour = 0;
    long theDay, theHour;
    double elapsedTime = 0.0;

    // --- open the files & read input data
    ErrorCode = 0;
    swmm_open(f1, f2, f3);

    // --- run the simulation if input data OK
    if ( !ErrorCode )
    {
        // --- initialize values
        swmm_start(TRUE);

        // --- execute each time step until elapsed time is re-set to 0
        if ( !ErrorCode )
        {
            do
            {
                swmm_step(&elapsedTime);
                newHour = (long)(elapsedTime * 24.0);
                if ( newHour > oldHour )
                {
                    theDay = (long)elapsedTime;
                    theHour = (long)((elapsedTime - floor(elapsedTime)) * 24.0);
                    oldHour = newHour;
                }
            } while ( elapsedTime > 0.0 && !ErrorCode );
        }
    }
  • 写回答

3条回答 默认 最新

  • threenewbee 2019-07-12 09:35
    关注

    dll的代码是不是你写的?如果可以修改,可以增加一个回调函数(函数指针)作为参数
    C++的函数的局部变量,原则上是无法直接访问的。除非你不按原则,强行去访问堆栈,而且变量在堆栈上的位置又是固定的情况下。
    dll在计算了elapsedTime后报告进度。
    如果不行,只能使用伪进度报告,也就是主程序自己估进度,用多线程异步调用dll

    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python