C# C中线程中使用的Win32 COM对象
我们有一个用Delphi XE开发的Win32 COM对象。通过在Delphi中开发的测试程序,我们可以在线程中启动COM对象。调试时,我们可以看到正在运行的COM对象位于调用例程创建的线程内 在我们的C应用程序中,这是一个使用与Delphi测试应用程序相同的线程执行方法开发的服务,我们没有看到相同的行为。COM对象不在执行它的C线程内运行。我们使用了Kernel32.dll的GetCurrentThreadID来获取Windows句柄。从COM对象查看Windows线程句柄时,它始终是同一个句柄。它不是执行线程的句柄 是否可以在C线程内运行COM对象并使其在线程内活动?基本上,我们如何从COM对象中的C线程获得相同的Windows线程处理程序 我们的C线程是MTAC# C中线程中使用的Win32 COM对象,c#,multithreading,delphi,winapi,com,C#,Multithreading,Delphi,Winapi,Com,我们有一个用Delphi XE开发的Win32 COM对象。通过在Delphi中开发的测试程序,我们可以在线程中启动COM对象。调试时,我们可以看到正在运行的COM对象位于调用例程创建的线程内 在我们的C应用程序中,这是一个使用与Delphi测试应用程序相同的线程执行方法开发的服务,我们没有看到相同的行为。COM对象不在执行它的C线程内运行。我们使用了Kernel32.dll的GetCurrentThreadID来获取Windows句柄。从COM对象查看Windows线程句柄时,它始终是同一个句
/BrianCOM DLL的线程模型是什么?您的C线程是MTA,但COM类支持的线程模型是什么?完全有可能它不受MTA支持,因此RPC管理器将启动一个单独的线程来服务并永远拥有它,将MTA的呼叫封送到该STA并返回.Hi。我们的delphicom对象是ciMultiInstance和tmpartment。这将解释单独的STA持有您的对象,这与我上面指定的原因非常接近。因此,要回答您的问题,不,您不会在MTA中创建该对象。它不支持它。如果可以创建一个STA线程,您可以从C中获取它。我是C白痴,所以我真的不知道这是否可行。TMPartment是STA Conit_APARTMENTTHREADED,tmFree或TMThread都是MTA Conit_多线程:参见