2012-03-06 71 views
0

好的,所以我有用C++編寫的調用函數SetThreadDesktopthis code。在Windows XP上以System用戶身份運行時,我從dll調用該函數。C#和VB.NET控制檯會話之間的區別

從C#控制檯應用程序調用時,該函數成功,但是當從VB.NET控制檯應用程序調用時,它不會。隨着GetLastError,我看到錯誤消息是這樣的:

SetThreadDesktop failed with error 170: The requested resource is in use (translated from french) 

它是如何來它適用於一個C#控制檯應用程序而不是一個VB.NET嗎?順便說一句,它不適用於winform應用程序。任何.NET高手都可以向我解釋這一點嗎? 它是一個編譯器選項,我必須改變?

感謝

+2

需要查看代碼。 C#和VB做不同的事情。 – Rocklan 2012-03-06 11:49:48

+0

@LachlanB點擊鏈接。 – vulkanino 2012-03-06 11:51:47

+0

@LachlanB代碼只是導入dll,然後在C#和VB.NET中調用該函數。 – GianT971 2012-03-06 11:53:27

回答

2

嘗試在你的(VB)加入<MTAThread>屬性的主方法中說明here

這是C#和VB控制檯項目之間唯一不同的默認設置。

+0

這就是解決我的問題!謝謝:)但這個技巧不適用於Winform,雖然 – GianT971 2012-03-06 14:07:57

+1

這是因爲winforms應用程序必須是STAThread,否則它們不起作用。 – 2012-03-06 14:27:47

1

你不應該聲明外部函數作爲public shared

<DllImport("AltCtrlDelCpp.dll")> _ 
Public Shared Function SimulateAltControlDel() As Boolean 
+0

是的 - DLL導入必須應用到共享/靜態方法。當然,如果方法在模塊中聲明,那麼暗示「共享」。 – VinayC 2012-03-06 11:59:58

相關問題