Excel通过DLL在C函数调用期间锁定



我是通过excel 2003的dll文件来函数,但请注意,excel中的所有excel中都锁定了dll,而dll是" active"的(不知道如何描述它)。无论如何,是否要"释放"它。通过excel的DLL有几个C函数调用,但是在这些调用之间,我希望在Excel中进行图形,以更新。excel将在C函数调用后将某些数据写入图形的源数据,但图形不会直接更新。在程序完成之前,这些图不会更新。

最好的问候,马克斯

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

选项1:泵消息/doevents

C函数必须泵送消息才能响应excel。但是请注意,这使系统重新进入,这使事情变得非常复杂。如果在您的C功能期间发生诸如按钮之类的传入消息,则可能导致该功能第二次称为函数,这可能不会预期。(这取决于您的功能)。

视觉基本等效物是" doevents"。在C中看起来像这样:

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

这将处理所有等待消息(对于鼠标单击,重新绘制等等),直到没有剩下,然后返回。如果没有消息,它将立即返回。

选项2:be asynchronous

第二个选项是分解您的功能,以便它可以在单独的线程上运行。然后,您要么提供一个函数完成(例如COM)后调用的回调,也可以定期进行轮询以查找工作何时完成。

最新更新