注意!不是WPF调用C++!我们有个项目一开始的时候是MFC写的。后来由于一些原因需要用WPF写一个模块。集成的时候,将WPF项目打包成DLL,由原来的系统去调用。涉及到了VC调用WPF的问题。我开了个测试项目试了一下,结果如下:
这个是两个项目:
这个是WPF唯一的主类:
这个是C++调用的Main类:
调试结果:
这个问题是怎么回事,我曾经想过在WPF的那个类中用STAThread特性,但是我没有申明自定义方法,完全用不上。
不要怀疑我的DLL文件位置啥的。不可能有问题。我用C++调用C#的DLL完全没问题。放在同一个地方的。
调用线程必须为 STA,看语句:MainWindow ^w = ncnew MainWindow(),调用方为 int main() 函数,因此这里的调用线程是你的 C++ 控制台程序,所以你在 WPF 的那个类上使用特性是没用的(无论是否可以使用)。解决的办法是将 MainWindow ^w = gcnew MainWindow() 语句放到一个具有 STA 的线程中去。比如:
CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);
MainWindow ^w = gcnew MainWindow();
getchar();
CoUninitialize();