多dll中 调用一些api 会死锁? 原因何在? 例如Getopenfilename和SHGetFileInfo.该怎么解决

多dll中 调用一些api 会死锁?. 原因何在? 例如Getopenfilename和SHGetFileInfo...
我的程序是一个exe 然后根据配置调用其他几个dll 可能同时加载多个dll 也可能只加载一个dll。

exe开始的时候有com的初始化,和ole初始化。

在程序中 有一个浏览按钮 点击按钮调用Getopenfilename(),函数可以执行到,但是当执行到这个函数之后就停滞了,
有点类似死锁,浏览界面没有打开
程序没有返回,而且这个dll也不响应任何消息了。

完全挂死了、而且其他Dll可以正常工作。 但是在任何一个Dll中 只要执行了一些对文件操作的API都会死锁。

找了很久原因也没有找到 不知道是否有办法解决?

1.程序代码应该是没有低级问题,在很多电脑点都测试过了,完全没有问题 只有一个电脑上有问题,难道用这些文件API的时候需要特殊操作?
2.这一台机器上出现了问题,而且每次必现,但是是别人电脑我也没有办法安装vs调试,只能自己改完了再给他帮忙测试,也很别扭,如果有人遇到过 请分享下解决方法 感激不尽!

------解决方案--------------------
死锁的时候,用adiplus等生成dump,然后查看那个时候的线程,内存等数据
------解决方案--------------------
程序开始调用多线程的CoInit之后,GetOpenFileName会有点问题,就是在XP下没有我的电脑。。不知道会不会有别的问题
------解决方案--------------------
GetOpenFileName是Shell的API,需要STA
初始化的时候用OleInitialize,不要手动初始化COM
------解决方案--------------------
OleInitialize(NULL)自己调用coinitialize
你装了支持文件对话框的shell扩展的话,也可能会导致文件对话框异常。

------解决方案--------------------
探讨

死锁的时候,用adiplus等生成dump,然后查看那个时候的线程,内存等数据