[問題] C#中DllImport 函數呼叫

看板C_Sharp (C#)作者 (豆乳機)時間12年前 (2013/07/22 11:55), 編輯推噓1(106)
留言7則, 1人參與, 最新討論串1/1
向大家請教一些問題, 其實我還是不太了解要如何才能讓同一個function在多個.cs中被呼叫, 是只要using進來可以嗎?還是namespace要相同才可以? 情況是這樣的,手上拿到對方給的dll檔, 在同一個專案中另開了一個imitatePacket.cs和Form1.cs, 在imitatePacket.cs中將此dll import進來, imitatePacket.cs程式碼如下: using System.Runtime.InteropServices; namespace imitatePacket { public class imPacket { [DllImport("Bus.dll", EntryPoint = "bus_GetNumDevices", CallingConvention = CallingConvention.StdCall)] public static extern BUS_STATUS Bus_GetDevices(ref uint numofDevices, ushort vid, ushort pid); public static BUS_STATUS Result = BUS_STATUS.BUS_DEVICE_ACCESS_ERROR; public static bool API_GetDevices(ushort vid, ushort pid) { uint numDevices = 0; Result = bus_GetDevices(ref numDevices, vid, pid); if (Result == BUS_STATUS.BUS_SUCCESS) { return true; } else { return false; } } } } ================================================= 接下來要在Form1.cs中呼叫在imitatePeckte.cs中dll import進來的function, 這時候先加入using imitatePacket;(??) 但在Form1.cs中呼叫imitatePacket.cs中的class imPacket中的成員API_GetDevices依然 是出現錯誤的訊息。 Form1.cs的程式碼如下 using imitatePacket; namespace formosa { public partial class Form1 : Form { public Form1() { InitializeComponent(); } ushort uvid=4292, upid=60048; imPacket.API_GetDevices(uvid, upid);//未能成功呼叫 } } ====================================== 請問大家我是在哪個地方做錯或是沒有注意到呢? 是要把imitatePacket.cs中的namespace改成跟Form1.cs一樣的formosa呢? 還是只要在Form1.cs中加入using imitatePacket;才對呢? 試過上面兩種方法還是產生錯誤。 或是有其它的地方做錯,也請大家指教一下,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.229.163

07/22 18:10, , 1F
步驟看起來沒問題,我推測問題還是在DllImport的宣告
07/22 18:10, 1F

07/22 18:10, , 2F
這也是這類問題最常見的狀況。
07/22 18:10, 2F

07/22 18:11, , 3F
如果你Build專案時沒有出現錯誤訊息,等到呼叫時才出
07/22 18:11, 3F

07/22 18:11, , 4F
現錯誤,就印證我的推測。
07/22 18:11, 4F

07/22 18:12, , 5F
如果還是懷疑少了什麼步驟,先將全部的程式寫在Form1
07/22 18:12, 5F

07/22 18:13, , 6F
如果還是懷疑少了什麼步驟,建議先將全部的程式寫在
07/22 18:13, 6F

07/22 18:14, , 7F
Form1那邊,確定可行後,再Refactor出來。
07/22 18:14, 7F
文章代碼(AID): #1HxAq_X9 (C_Sharp)
文章代碼(AID): #1HxAq_X9 (C_Sharp)