我是通过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)后调用的回调,也可以定期进行轮询以查找工作何时完成。