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 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改