我希望MFC应用程序可以创建没有CLR依赖的WPF控件。我的解决方案是创建一个具有CLR依赖性的MFC常规Dll,它调用我的WPF控件libarary来创建一个wpf控件。 MFC应用程序调用此MFC常规Dll来创建wpf控件。问题是当调用代码“HwndSource ^ source = gcnew HwndSource(0,0,0,0,0,name,IntPtr :: Zero);”时,应用程序抛出异常“调用线程必须是STA ,因为许多UI组件需要这个“。我尝试了几个解决方案,如SetApartmentState,LoadLibrary,CreateThread,Threading :: Start等,但它们从未工作过。
MFC应用程序是一个对话框基础应用程序,调用代码是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="case" match="case" use="RMEM" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="folder">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="key('case', FOLDERID)" />
</xsl:copy>
</xsl:template>
<xsl:template match="AWD" />
</xsl:stylesheet>
MFC常规dll在共享动态库中使用MFC dll,导出功能为:
void CMFCApplication1Dlg::OnBnClickedButton1()
{
CreateCLRControl();
}