当我尝试从非主线程调用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,现在唯一的办法就是将我的程序限制为单线程,这并不令人兴奋。
有没有解决方案?
谢谢!
答案 0 :(得分:0)
您必须在使用COM的每个线程上调用CoInitialize()。