【发布时间】:2010-07-06 00:55:29
【问题描述】:
我为 C++ 程序编写扩展。我编写标准 C/C++ dll 并使用 IJW 调用 C# dll。在我编写并调用了一个 C# dll 之前,这一直很有效,该 dll 又调用了一个 OpenFileDialog 和一个 SaveFileDialog。每当使用 ShowDialog 调用其中任何一个时,应用程序都会冻结。
因此,在制作“最小工作示例”时,我得到了: System.Windows.Forms.dll 中出现“System.Threading.ThreadStateException”类型的未处理异常
附加信息:在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记了 STAThreadAttribute。仅当将调试器附加到进程时才会引发此异常。
所以,我尝试在“最小工作示例”中的 main 前面添加 STAThread 属性,但出现此错误。
错误 C2337:“STAThread”:找不到属性
那么,两个问题:
- 我如何让“最小工作示例”正常工作和
- 如何让真正的应用程序正常工作?
(甚至可以在 #pragma 非托管块中添加 STAThread 属性吗?)
#pragma unmanaged
BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved)
{
...
}
【问题讨论】: