2014-04-11 40 views
0

我創建了一個C DLL,並且在過去的2個月中我一直在C#Windows窗體應用程序中使用它。在我需要從使用P/invoked函數的表單繼承之前,我沒有任何問題。從使用dllimport-ed函數的窗體繼承時出錯

在DLL中的函數:

extern "C" void __declspec(dllexport) __stdcall setBrightness(long a) 
    { 
    ... 
    } 

的P/Invoke在C#中的功能:

[DllImport("UserDLL.dll")] 
    public extern static void setBrightness(Int32 Brightness); 

我如何從Form1的繼承使用P /調用的函數:

partial class UserSide: Form1 
    { 
    ... 
    } 

代碼編譯時沒有任何錯誤/警告,程序似乎沒有任何缺陷地執行。但是,當我嘗試打開使用側窗體的設計會出現以下畫面:

enter image description here

有誰知道爲什麼會這樣?這可能是有用的知道,當我在Form1中直接從文件加載圖像會出現類似的錯誤:

StatusIcons[0] = System.Drawing.Image.FromFile("ImgIcn/camera_test.png"); 

enter image description here

爲了解決這個問題我在資源移動的圖像,但我不」我認爲在dll上做同樣的事情是明智的(如果可以的話)。 我正在使用VS2010。

預先感謝您!

克里斯..

回答

0

根據您的截圖堆棧跟蹤該問題的原因是,設計師運行的代碼試圖顯示窗體時,只應在運行時執行。因此,我建議移動的關鍵代碼部分在if塊是檢查DesignMode屬性,例如:

public Form1() 
{ 
    InitializeComponent(); 
    if (!DesignMode) 
    { 
     // execute code that can only run at runtime 
    } 
} 
+0

謝謝!它工作得很好! – ChrisB