我有一个C#应用程序到一个inproc COM服务器组件的COM互操作问题。C#/ COM互操作只能在调试器中
我已经将问题简化为一个简单的c#测试程序。它实例化服务器组件的interop类,将实例上的字符串值设置为属性,然后设置另一个字符串属性。我在编组时并没有做任何不寻常的事情。只需使用在添加对COM组件的引用时生成的interop类。喜欢的东西:
using MyLib; // Interop assy
// ...
MyComp comp = new MyComp();
comp.Prop1 = "abc";
comp.Prop2 = "xyz";
成果:
如果我跑VS外面的测试程序,然后,当第二属性设置,我一直得到一个与收到COMException的
0x80010105
的HRESULT(RPC_E_SERVERFAULT
) 。如果我在Visual Studio 2005中运行测试程序,那么它一直工作正常。
我写的托管C等效代码++(ATL没有,只是普通的接口指针),这正常工作在国内外享有很高的VS.
我的问题:在调试器内部运行时发生互操作的环境有什么不同?我认为E_RPC_SERVERFAULT
是由interop编组生成的,但为什么只在调试器中?有关如何进行此操作的任何建议?
[我没有多说关于com组件,因为我的问题是关于我看到进出调试器的不同行为。 com组件已经过很好的测试,并且已经在生产中使用了7年(在服务器环境中每天有数千次调用),所以我对此充满信心。它是一个32位的DLL。我有源码,但目前没有适合它的构建环境。即使我这样做,我也不知道如何从托管代码调试它。这是可能的]
UPDATE
没有解决办法,但一些观察:
- 我试图运行的应用程序作为管理员,同时还与UAC关闭。同样的结果。
- 我试图在发生错误之前附加到进程,但是我看不到在输出窗口中显示正在引发的结构化异常。
- 我试着明确地设置测试应用程序的主线程的公寓模型到STA然后MTA,但这没有什么区别。 COM组件是带螺纹的。
- 我试图在Win2003机器和不同的Win7专业机器上运行托管测试应用程序(在Visual Studio外)。它在两者上都正确运行。
最后一项指出我的机器有问题,但我不确定是什么。
[环境是运行在Visual Studio 2005 Pro上的Win7 Pro 32位上的Framework 2.0。]
你是否偶然以管理员身份运行Visual Studio? UAC /权限可能是一个问题 – BrokenGlass 2011-03-02 20:27:07
这是一个与*进程外* COM服务器紧密关联的错误。这给解释留下了很小的空间。没有调试器没有桨。尝试在启动后附加调试器。 – 2011-03-02 20:28:54
@BrokenGlass好主意。我以管理员身份运行VS2005。不好,我知道,但我在Win7上。我现在在家,vpn到我的开发箱似乎已经关闭,所以我会在早上尝试在管理员命令窗口中运行测试。谢谢! – 2011-03-02 21:55:33