一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C# 在項目中引用x86 x64的非托管代碼的方法

C# 在項目中引用x86 x64的非托管代碼的方法

2022-02-20 14:10C#教程網 C#

使用宏最簡單的方法是編譯兩個版本,編譯多個版本可以點擊配置管理器,然后創建x86和x64,然后版本添加宏,這樣就可以判斷宏來使用不同的dll。這篇文章主要介紹了C# 在項目中引用x86 x64的非托管代碼的方法,需要的朋友可以參考

因為現在的項目使用的是 anycpu 在 x86 的設備使用的是x86,在x64使用的是x64,但是對于非托管代碼,必須要在x64使用x64的dll,在x86使用x86的dll。在c++沒有和c#一樣的 anycpu 所以需要在項目運行在x86的時候加載x86的dll。 本文告訴大家如何在代碼引用不同的dll。

使用宏

最簡單的方法是編譯兩個版本,編譯多個版本可以點擊配置管理器,然后創建x86和x64,然后版本添加宏,這樣就可以判斷宏來使用不同的dll

C# 在項目中引用x86 x64的非托管代碼的方法

點擊活動解決方案平臺,然后點擊新建

C# 在項目中引用x86 x64的非托管代碼的方法

選擇項目屬性,點擊生成,就可以添加不同的宏

C# 在項目中引用x86 x64的非托管代碼的方法

于是在后臺代碼可以這樣寫

C# 在項目中引用x86 x64的非托管代碼的方法

?
1
2
3
4
5
6
7
#if x86
  public const string dll_file_name = "svkiqauhkvdhrureh32.dll";
#else
  public const string dll_file_name = "svkiqauhkvdhrureh64.dll";
#endif
  [dllimport(dll_file_name, entrypoint = "hfwzsnhzhpbbzbn", callingconvention = callingconvention.cdecl)]
  private static extern int hfwzsnhzhpbbzbn(int var1, int var2);

可以看到這個方法如果有很多個 dll 那么需要寫很多路徑

多個函數

實際上如果已經有兩個dll ,那么可以使用兩個不同函數

?
1
2
3
4
5
6
[dllimport("svkiqauhkvdhrureh32.dll", entrypoint = "hfwzsnhzhpbbzbn",
   callingconvention = callingconvention.cdecl)]
  private static extern int hfwzsnhzhpbbzbn32(int txcuiwkjvwu, int hhmzfadnhexkmr);
  [dllimport("svkiqauhkvdhrureh64.dll", entrypoint = "hfwzsnhzhpbbzbn",
   callingconvention = callingconvention.cdecl)]
  private static extern int hfwzsnhzhpbbzbn64(int txcuiwkjvwu, int hhmzfadnhexkmr);

然后再寫一個函數

?
1
2
3
4
5
6
7
8
9
public int hfwzsnhzhpbbzbn(int txcuiwkjvwu, int hhmzfadnhexkmr)
    {
      if (environment.is64bitprocess)
      {
        return hfwzsnhzhpbbzbn64(txcuiwkjvwu, hhmzfadnhexkmr);
      }
 
      return hfwzsnhzhpbbzbn32(txcuiwkjvwu, hhmzfadnhexkmr);
    }

這樣就不需要在使用的時候判斷當前使用的是哪個,但是如果dll多了,一個dll都需要寫三次,看起來代碼還是很爛

設置查找的文件

實際上好多人都覺得,應用程序首先是從運行的目錄開始查找dll,如果找不到,就去gac查找,如果還是找不到,就去system查找。實際上這句話是不對的,在沒有設置默認查找的文件的時候就是這樣,但是軟件是可以設置查找文件。

設置的方法使用使用這個dll,請看下面

?
1
2
3
4
5
6
7
8
public int hfwzsnhzhpbbzbn(int txcuiwkjvwu, int hhmzfadnhexkmr)
  {
   if (environment.is64bitprocess)
   {
    return hfwzsnhzhpbbzbn64(txcuiwkjvwu, hhmzfadnhexkmr);
   }
   return hfwzsnhzhpbbzbn32(txcuiwkjvwu, hhmzfadnhexkmr);
  }

需要先把 x86 的 dll 放在程序的 x86文件夾,當然對于x64的大家也知道放哪里。

然后在程序運行的時候使用下面的代碼

?
1
2
[dllimport("kernel32.dll", charset = charset.auto, setlasterror = true)]
 private static extern bool setdlldirectory(string path);

這樣就可以直接寫一個函數,最后的方法是我推薦的。

但是存在一些特殊的文件,他不能放在x86文件夾,所以就需要使用下面的代碼特別加載

?
1
2
3
var path = path.getdirectoryname(assembly.getentryassembly().location);
   path = path.combine(path, environment.is64bitprocess ? "x64" : "x86");
   setdlldirectory(path);

查看了項目的代碼才看到,實際上還有一個方法,就是在運行的時候,如果當前運行的是x86的,就從x86文件夾復制dll出來,這個方法是速度最慢的。

總結

以上所述是小編給大家介紹的c# 在項目中引用x86 x64的非托管代碼的方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

原文鏈接:https://www.tuicool.com/articles/nQ3uAzI

延伸 · 閱讀

精彩推薦
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: 美女班主任下面好爽好湿好紧 | 国产永久免费爽视频在线 | 色一情一区二区三区四区 | 星空无限传媒xk8027穆娜 | 亚洲国产剧情中文视频在线 | 国产一级在线观看 | 日韩色图区 | 国产欧美亚洲精品第一页青草 | 欧美一级高清片免费一级 | 古装一级毛片 | 边摸边吃奶边做爽视频免费 | 成人黄页网站 | 国产精彩对白综合视频 | 免费一级欧美片片线观看 | 毛片在线观看网站 | 亚洲另类老妇videos | 99久久综合精品免费 | 国产 日韩 欧美 综合 | 美女和男人差差 | 欧美老骚| 欧美精品一区视频 | 国产精品永久免费自在线观看 | 欧美精品一区二区在线观看播放 | 国产一区二区不卡视频 | 美女被爆| 日本精品久久久久中文字幕 1 | 男人曰女人 | 久久九九久精品国产尤物 | 冰雪奇缘1完整版免费观看 变形金刚第一部 | 国产精品久久久久影视不卡 | 大胸被c出奶水嗷嗷叫 | 国产自拍啪啪 | 久久久精品国产免费A片胖妇女 | 午夜视频一区二区三区 | 亚洲国产福利精品一区二区 | 男人的天堂久久爱 | 青青青国产手机在线播放 | 丰满的闺蜜2中文字幕 | 不卡一区二区三区 | 亚飞与亚基国语1080p在线观看 | fquer老师 |