我需要在我的C#程序中封裝一個非託管函數。
有沒有什麼辦法可以知道我在C#中的託管聲明是否與本機聲明匹配?
我注意到,如果它不匹配,當我嘗試調用它時,不會引發任何執行,所以我不知道該函數是否真的被調用。
(非託管功能來自第三方組件,因此我無法在其中放入日誌或進行更改)。C#Pinvoke - 我如何知道我的託管定義有什麼問題?
0
A
回答
2
沒有辦法自動檢查您的p/invoke聲明是否與本機函數匹配。責任在於你做對。
通常,如果你弄錯了,會引發異常。但不總是。
1
偶爾我在我自己的非託管DLL中複製了一個複雜的函數簽名,並測試瞭解P/Invoke如何封裝參數。如果您在託管項目中啓用了非託管調試,那麼您可以從託管代碼調試到非託管代碼,這可以幫助您解決P/Invoke失敗的原因。
相關問題
- 1. 我的定義有什麼問題? C++
- 2. 我不知道有什麼問題
- 3. 我不知道我的程序有什麼問題,
- 4. 我不知道我的編碼有什麼問題。 (javascript)
- 5. 我不知道我的螞蟻junit任務有什麼問題
- 6. 我有stdclass [括號]的問題,我不知道爲什麼
- 7. 我的代碼有些問題,我不知道是什麼,
- 8. 我不知道我的語法有什麼問題
- 9. 我不知道我的if語句有什麼問題
- 10. 只是想知道我的SQL語句有什麼問題
- 11. 我不知道這個python程序中有什麼問題
- 12. SendInput()PInvoke不起作用,我不知道爲什麼
- 13. 有人知道我在C#Unity3D中的if語句有什麼問題嗎?
- 14. 不知道我的SQL有什麼問題嗎?
- 15. 我的sh腳本有問題不知道爲什麼?
- 16. 初學者..不知道我的添加Arraylist有什麼問題
- 17. 矢量問題,C++不知道我做錯了什麼
- 18. 我如何知道我使用的是什麼Windows主題?
- 19. 我如何知道XHR請求出了什麼問題?
- 20. 如何定義我的fancybox有什麼問題?
- 21. 我的INTEROP片段有什麼問題?
- 22. 我不知道這段代碼有什麼問題嗎?
- 23. 我不知道這段代碼有什麼問題SQL
- 24. 我不知道聯繫表格有什麼問題
- 25. 我不知道這個功能有什麼問題
- 26. 如何知道他需要什麼類型的託管?
- 27. 我的C++代碼有什麼問題?
- 28. 我的C#代碼有什麼問題?
- 29. C++我的邏輯有什麼問題?
- 30. 我的JavaScript有什麼問題? (C#/ ASP.NET)
AFAIK你不能確定非託管導入函數的簽名。如果它們不匹配,則可能會產生垃圾(或訪問違規)。即使你在本地做了所有事情,你也沒有這樣的東西(假設要改變 - 比方說 - 定義fopen(),它會編譯,但會崩潰)。 –