1

我正在开发一个使用 PInvoke 调用非托管 C++ DLL 函数的 C# WPF 应用程序。WPF 应用程序是使用 Blend 创建的。

CoInitializeEx(NULL, COINIT_MULTITHREADED)从 PInvoke 函数调用非托管 C++ DLL 。我在这行代码中收到一条错误消息"COM library already initialized with incompatible concurrency model"

我假设 WPF 本质上是 STAThread。我对吗?

如何解决上述错误?

4

1 回答 1

0

是的,WPF UI 线程会将 COM 单元状态初始化为单线程。如果它不是单个单线程单元,那么一大堆东西就会失败。

您需要启动一个新线程并调用您的 C++ DLL 并确保该线程的单元状态是多线程的。可以使用Thread.SetApartmentState设置线程的单元状态,但默认情况下,所有新线程都是多线程的。

于 2013-05-26T02:32:09.910 回答