C#编组调用C ++ DLL。 COM和线程问题

时间:2015-02-24 20:46:01

标签: c# c++ dll com marshalling

当我尝试从非主线程调用extern方法时,我从用C ++线程编写的DLL中得到COM CoInitialize错误。

仅仅为了更多细节,我已经定义了一个别名来调用我的C#控制台项目中的c ++方法。

e.g。 [DllImport(“WRITTENINC ++。dll”,CharSet = CharSet.Ansi)] public static extern Int32 DOTHIS(string s1,string s2,ref double d1,ref double d2);

我将[STAThread]置于Program.Main方法之上。

当我在主线程中调用该方法时,我得到了正确的结果。但是,如果我在不同的线程中运行相同的代码行(使用System.Threading和thread.Start()),我会收到有关COM初始化的错误。

假设我无法修改DLL,现在唯一的办法就是将我的程序限制为单线程,这并不令人兴奋。

有没有解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在使用COM的每个线程上调用CoInitialize()。