首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >独立的(无注册表) COM组件行为

独立的(无注册表) COM组件行为
EN

Stack Overflow用户
提问于 2010-03-17 00:54:22
回答 1查看 421关注 0票数 0

我有一个相当尴尬的情况。

我有一个小的COM公开组件(让我们称它为SmallCOM),它是一个( win32 )Delphi动态链接库,我从一个托管的C#程序集(通过COM)使用它。

我有一个很大的COM公开组件(让我们称它为BigCOM),它是一个( win32 )Delphi动态链接库,我从同一个托管c#程序集中(再次通过COM )使用它。

有趣的是,BigCOM还通过COM实例化和使用SmallCOM。

所有这些都发生在同一个过程中,出于某些原因,我有时会遇到低级无法捕获的异常,告诉我(使用windgb分析时):

代码语言:javascript
复制
STACK_COMMAND:  .cxr 00000000 ; kb ; ~10s; .ecxr ; kb 

SYMBOL_STACK_INDEX:  2 

SYMBOL_NAME:  SmallCOM+178c6

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: SmallCOM 

IMAGE_NAME: SmallCOM.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  2a425e19

FAILURE_BUCKET_ID: 

NULL_CLASS_PTR_DEREFERENCE_c0000005_SmallCOM.dll!Unloaded

BUCKET_ID: APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE_SmallCOM+178c6

WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/C#Service_exe/2_4_0_1/4ad7147f/ntdll_dll/5_2_3790_3959/45d70ad8/c0000005/0004afb2.htm?Retriage=1

Followup: MachineOwner

我猜BigCOM已经完成了SmallCOM的工作并释放了它,使得C# exe无法再次使用它(重新加载它是毫无疑问的,exe是一个高度多线程的服务,即使BigCOM正在工作,它也会使用这个SmallCOM )。

所以,我的问题是:在我的C# exe中使用Isolated Reg-Free COM来隔离SmallCOM能解决这个问题吗?或者,仍然共享相同进程的BigCOM和C# exe无论如何都会使用相同的SmallCOM.dll吗?

提前感谢!艾蒂安。

EN

回答 1

Stack Overflow用户

发布于 2010-03-17 05:33:12

如果已经卸载了dll (这是COM运行时要做的事情,它不是由应用程序直接完成的),那么该库似乎很可能过早地从DllCanUnloadNow返回值(假设这是DLL实现该函数)。

如果是这种情况,要么是SmallCOM中的错误需要修复,要么是作为创可贴,您可以使用GET_MODULE_HANDLE_EX_FLAG_PIN标志调用GetModuleHandleEx,该标志将停止卸载DLL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2456390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档