我寫一個C++程序的擴展。我編寫標準的C/C++ dll,並使用IJW調用C#dll。直到我編寫並調用一個C#dll,然後調用一個OpenFileDialog和一個SaveFileDialog,這一直運行得非常完美。無論何時使用ShowDialog調用,該應用程序都會凍結。C++/cli - >調用c#dll - >調用OpenFileDialog問題
所以在製作「最低工作實例」我得到了一個: 型「System.Threading.ThreadStateException」的未處理的異常出現在System.Windows.Forms.dll中
附加信息:當前線程必須是在進行OLE呼叫之前設置爲單線程單元(STA)模式。確保您的Main函數具有標記的STAThreadAttribute。只有在調試器連接到進程時纔會引發此異常。
因此,我試圖在我的「最小工作示例」中添加main的STAThread屬性,我得到了這個錯誤。
錯誤C2337: 'STAThread':屬性未找到
於是,兩個問題:
- 如何D0,我得到了 「最低工作實例」 工作和
- 怎麼辦我得到真正的應用程序工作?
(它甚至有可能添加STAThread屬性在非託管的#pragma塊?)
#pragma unmanaged
BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved)
{
...
}
比我更更好的答案。 – 2010-07-06 01:09:19
對我來說,使用WPF而不是WinForms,通過在主函數中調用CoInitialize(NULL)來解決類似的問題。在這種情況下,啓動一個新線程並不是必需的(通常也不需要) – 2013-05-06 05:41:44