C#實現修改動態鏈接庫
C#語言還是比較常見的東西,這里我們主要介紹C#實現修改動態鏈接庫,包括介紹在 C# 中調用 C++ 編寫的動態鏈接庫函數等方面。
C#實現修改動態鏈接庫,將b修改為雙重指針:
- public class RefComm
- {
- [DllImport("LibEncrypt.dll",
- EntryPoint=" mySum ",
- CharSetCharSet=CharSet.Ansi,
CallingConventionCallingConvention=CallingConvention.StdCall)]- public static extern string mySum (string a, ref string b);
- }
在C#中調用測試:
- string strDest="";
- string strTmp= RefComm. mySum("12345", ref strDest);
運行查看結果 strTmp 和 strDest 均為"12345",調用正確。實現了函數出口參數正確輸出結果。
C#實現修改動態鏈接庫,實現整數參數的輸出:
- public class RefComm
- {
- [DllImport("LibEncrypt.dll",
- EntryPoint=" mySum ",
- CharSetCharSet=CharSet.Ansi,
CallingConventionCallingConvention=CallingConvention.StdCall)]- public static extern int mySum (int a, int b,ref int c);
- }
經過以上的試驗,基本掌握了如何定義動態庫函數以及如何在 C# 定義導入,有此基礎,很快我實現了變長加密函數在 C# 中的調用,至此目標實現。
在 C# 中調用 C++ 編寫的動態鏈接庫函數,如果需要出口參數輸出,則需要使用指針,對于字符串,則需要使用雙重指針,對于 C# 的導入定義,則需要使用引用(ref)定義。
對于函數返回值,C# 導入定義和 C++ 動態庫函數聲明定義需要保持一致,否則會出現函數調用失敗。定義導入時,一定注意 CharSet 和 CallingConvention 參數,否則導致調用失敗或結果異常。運行時,動態鏈接庫放在 C# 程序的目錄下即可,我這里是一個 C# 的動態鏈接庫,兩個動態鏈接庫就在同一個目錄下運行。
【編輯推薦】