2013-06-11 33 views
0

我有hidapi.c庫:C#dllimport的wchar_t的*到StringBuilder的

int HID_API_EXPORT HID_API_CALL testwchar(wchar_t * string) { 
    //... 
    wcsncpy(string, cur_dev->serial_number, wcslen(cur_dev->serial_number)); 
    return wcslen(cur_dev->serial_number); 
} 

我有什麼在C#:

[DllImport("hidapi.dll", CharSet = CharSet.Unicode)] 
public static extern unsafe int testwchar(StringBuilder stringt); 
StringBuilder sb = new StringBuilder(64); 
res = testwchar(sb); 

我錯過了一些代碼部分的C函數//...它通過vid/pid枚舉設備和搜索並返回串行,它工作正常,當我在testapi.cpp中測試它,但是當我嘗試編寫c#gui ... visual studio 2012引發錯誤,談論不平衡堆棧......據我瞭解,如果我使用字符串作爲出參數,我需要使用stringbuilder而不是字符串。

我在做什麼錯? thanx任何建議。

p.s.對不起,但格式化母鹿沒有工作,所以代碼是一團糟......

+1

發佈'HID_API_EXPORT'和'HID_API_CALL'定義。可能這個問題是關於錯誤的調用約定。 – Dennis

+0

[Unbalanced Stack!]的可能重複(http://stackoverflow.com/questions/4171790/unbalanced-stack) – shf301

+0

不要這樣寫代碼。 testwchar()怎麼可能猜到StringBuilder有多少空間可用?猜測錯誤會破壞GC堆,非常難以診斷。添加另一個說明緩衝區有多大的參數。 –

回答

0

我建議你自己使用hidapi函數編譯你想要的信息。你可以找到它們的文檔here,而不是使用這個字符串函數。它會更有效率。

如果您需要poniters,this page上的代碼應該可以幫到您。