在通过DLL进行C函数调用期间,Excel被锁定

时间:2014-02-07 13:35:50

标签: c excel function dll

我是通过Excel 2003中的DLL文件调用C函数,但请注意,当DLL处于“活动状态”时,Excel中的everthing被锁定(不知道如何描述它)。无论如何“释放”它。从Excel通过DLL有几个C函数调用,但在这些调用之间我希望例如Excel中的图形要更新。 Excel将在C函数调用之后将某些数据写入单元格作为图形的源数据,但图形不会直接更新。在程序完成之前,图表不会更新。

祝你好运, 马库斯

1 个答案:

答案 0 :(得分:0)

在XLL中做慢的事情基本上不是一个好主意。

选项1:泵消息/执行事件

C函数必须为Excel提供消息才能响应。但请注意,这会使系统重入,这使事情变得非常复杂。如果在C函数期间发生诸如按钮单击之类的传入消息,则可能导致第二次调用该函数,这可能是不期望的。 (这取决于你的功能)。

Visual Basic的等价物是“DoEvents”。在C中它看起来像这样:

void DoEvents()
{
    MSG msg;
    while (PeekMessage(&msg, NULL,  0, 0, PM_REMOVE)) 
    { 
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

这将处理所有等待的消息(鼠标点击,重绘等),直到没有剩余,然后返回。如果没有消息,它将立即返回。

选项2:异步

第二个选项是分解你的功能,使它可以在一个单独的线程上运行。然后,您将提供在函数完成时调用的回调(例如,通过COM),或者您可以定期轮询以找出作业何时完成。