日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#.net调用动态库dll注意事项

發布時間:2025/3/21 C# 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#.net调用动态库dll注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#.net調用動態庫dll注意事項

?

本文主要描述作者在工作中所遇到技術難點及問題,最后提出相關的解決方案

?

場景?

?公司有個業務需求涉及到ID讀卡器,構建成在ID卡讀卡器一刷ID卡,系統就自動顯示其ID卡號以及該ID卡的基本信息和消費的記錄等信息;

?

問題

?在選購相關的ID讀卡器產品后,下載其開發包其中包含了用C++語言開發的動態庫DLL,在調用時出現以下問題:

1、無法加載 DLL“OUR_IDR.dll”: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)。?

?

2、嘗試讀取或寫入受保護的內存。這通常指示其他內存已損壞?

?

解決方案?

1、第一個問題“無法加載 DLL“OUR_IDR.dll”: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)。”,解決很簡單,具體方法是將 dll復制到應用程序中的bin目錄即可。?

?

2、

我在調用以下代碼時:

[DllImport("OUR_IDR.dll")]
?public?static?extern?byte[]?idr_read(byte[]?pserial);

?就出現錯誤“嘗試讀取或寫入受保護的內存。這通常指示其他內存已損壞 ”。

?

解決方法是將byte[]改為IntPtr即可,如:

?

[DllImport("OUR_IDR.dll")]
public?static?extern?IntPtr?idr_read(IntPtr?pserial);

?

?在調用時:

?

IntPtr?cardId?=?new?IntPtr();
IntPtr?result?=?Module.idr_read(cardId);

?即可;

?

C#在調用C++動態庫DLL時,注意數據類型轉換?

?

C# 與 C++ 數據類型對照
C++??????????? C#
=====================================
WORD??????????? ushort
DWORD??????????? uint
UCHAR??????????? int/byte?? 大部分情況都可以使用int代替,而如果需要嚴格對齊的話則應該用bytebyte?
UCHAR*??????????? string/IntPtr
unsigned char*???????? [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char*??????????? string
LPCTSTR??????????? string
LPTSTR??????????? [MarshalAs(UnmanagedType.LPTStr)] string
long??????????? int
ulong?????????????? uint
Handle??????????? IntPtr
HWND??????????? IntPtr
void*??????????? IntPtr
int??????????? int
int*??????????? ref int
*int??????????? IntPtr
unsigned int??????? uint
COLORREF??????????????? uint

?

https://www.cnblogs.com/samlin/archive/2012/03/23/DllImport.html

https://blog.csdn.net/jianhui_wang/article/details/82657595

總結

以上是生活随笔為你收集整理的C#.net调用动态库dll注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。