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

在做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 );
        }
    }
phenix2009
白色一大坨 你想什么呢,elapsedTime值要是在dll里面,你不返回c#怎么调用啊
4 个月之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 回复白色一大坨: 人家要实时,你这个只有函数返回才改变,思路错了
4 个月之前 回复
phenix2009
白色一大坨 返回如果是其他变量加个ref,如果是字符串类型,用string就行,很方便
4 个月之前 回复

3个回答

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

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复zx_billy: 回头给你写个例子
4 个月之前 回复
oTaiYangXingChen1
zx_billy 这个dll的源码有,可以请您稍微详细一点说吗?谢谢!
4 个月之前 回复

我仔细看了一下,题主你这是什么问题,你动态库里面东西封装死的,外面怎么可能调用的到,你要把这数返回去,你先得有个地方返回数据。

phenix2009
白色一大坨 回复请你们大家多多姿瓷我菠菜菌: 我知道你这low逼怀什么心思可惜啊,看见你一系列傻逼一样的操作,我感觉你也就这点本事了,有空回去多学习一下,别老天天在这巴掌大的地方瞎混
4 个月之前 回复
phenix2009
白色一大坨 回复请你们大家多多姿瓷我菠菜菌: 不学无术的,天天在这里搬运混分,要脸不要脸,操你妈的
4 个月之前 回复
phenix2009
白色一大坨 回复请你们大家多多姿瓷我菠菜菌: 傻逼你懂c#吗,就他妈说
4 个月之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 人家要实时,你这个只有函数返回才改变,思路错了,不能得分!
4 个月之前 回复

改写函数swmm_run, 加回调函数参数,该回调函数的调用并嵌入到do while循环中。

oTaiYangXingChen1
zx_billy 可以稍微详细一点吗?swmm_run里的回调函数怎么写?C#里应该怎么调用?谢谢!
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!