看板 C_Sharp 關於我們 聯絡資訊
諸位大大,小弟在寫一個程式 程式中要Invoke一個DLL的函數(這個DLL沒有Source Code) 由於自DLL呼叫的Function需要幾個參數,其中一個參數的類型是void * 但如大大們所知,C#並沒有支援Point,要想使用Point必須在unsafe的情況之 下有限度的有限度的使用.但是,小弟一直會遇到一個Exception.告訴小弟 程式執行呼叫該DLL Function時記憶體存取錯誤. 小弟想問的是,在C#中是否可以傳送void*(不可以為NULL)給某一個DLL的Function當作 他的參數.如果不行,那諸位大大是如何解決的呢. 以下是小弟我的程式片斷,大大們如果覺得有可以改進的地方,也望不吝指正. // 部份struct即宣告小弟先行掠過,指po部份重要的 // 所有程式均設成unsafe // 以下是DLLImport的主要宣告 [DllImport(dllName, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static unsafe extern Int32 query_ex(void* session_handle, ref Int32 TStatus, UInt32 Type, message* Buffer, sbyte BFlag, void* RBuffer, ref UInt32 RBuffer_Length, ref UInt32 TID, ref UInt32 ORID); // 以下是RBuffer使用前的處裡,其他部分的參數礙於篇幅先行掠過 IntPtr ptr1 = Marshal.AllocHGlobal(64000); void* RBuffer; RBuffer = ptr1.ToPointer(); // 跑到下面這一行時,都會發生Exception // 經過檢查是RBuffer的問題(此欄位不可為NULL,必須傳入void*或是char*) // 但一傳進去執行就有Exception Int32 ii = query_ex(Handle, ref glTStatus, glFType_EP0, queryMessage, BFlag, RBuffer, ref RLen, ref TID, ref ORID); // 發生的exception都是描述記憶體存取錯誤 /////////////////////////////////////////////////////////////////////// QQQ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.162.142