諸位大大,小弟在寫一個程式
程式中要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