簡體   English   中英

將C#委托的調用約定更改為CDECL

[英]Changing a C# delegate's calling convention to CDECL

當我使用DotNet1.1時,我遇到了C#的這個問題

問題是這個。 我有一個非托管的DLL,它有一個函數,它接受一個函數指針(以及其他參數)。 當我在C#代碼中聲明DLLImport時,我傳遞了一個委托。 但是C#中的委托具有stdcall調用約定,而非托管函數需要cdecl函數指針。 因此,我天真的做法導致了崩潰。 然后我找到了以下內容: http//www.codeproject.com/KB/cs/cdeclcallback.aspx有些人編寫了一個優秀的庫,可以根據我的理解改變代理的調用約定,MSIL-hacking。 事情進展順利,直到......

我遷移到VS2008和新版本的.NET。 在此版本下,上述庫不起作用。 我不是真正的C#或.NET專家,說實話,我幾乎不了解他的庫做了什么(雖然它是開源的),所以我甚至不想嘗試將它適應新的.NET。 但是,我希望更新版本的C#可以為我的問題提供更好的解決方案。

所以,SO專家,請幫我解決臀部疼痛:)

默認情況下,p / invoke系統將您的委托包裝在stdcall函數中。 您可以使用UnmanagedFunctionPointer屬性更改生成的包裝器的調用約定:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void MyDelegate();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM