我無法訪問COM接口中的某些字符串字段。調用整數字段不會導致錯誤。當嘗試撥打clientID()
,deviceID()
或key()
時,我收到舊的「試圖讀取或寫入受保護的內存」錯誤。PInvoke - 讀取字符串字段的值 - 「嘗試讀取或寫入受保護的內存」
這裏是源接口代碼:(代碼從here來源)
[scriptable, uuid(fab51c92-95c3-4468-b317-7de4d7588254)]
interface nsICacheEntryInfo : nsISupports
{
readonly attribute string clientID;
readonly attribute string deviceID;
readonly attribute ACString key;
readonly attribute long fetchCount;
readonly attribute PRUint32 lastFetched;
readonly attribute PRUint32 lastModified;
readonly attribute PRUint32 expirationTime;
readonly attribute unsigned long dataSize;
boolean isStreamBased();
};
這裏是用於訪問接口C#代碼:
[Guid("fab51c92-95c3-4468-b317-7de4d7588254"), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsICacheEntryInfo
{
string clientID();
string deviceID();
nsACString key();
int fetchCount();
Int64 lastFetched();
Int64 lastModified();
Int64 expirationTime();
uint dataSize();
[return: MarshalAs(UnmanagedType.Bool)]
bool isStreamBased();
}
任何建議,爲什麼簡單地試圖讀取一個字段應該對我進行訪問違規?
該接口的成員lastFetched,lastModified等作爲PRUint32。我不確定這是什麼,但它似乎是32位,但你在你的C#代碼中使用Int64。這可能是一個問題嗎? – 2009-10-22 17:08:15
我做了改變,但得到了相同的異常:( – 2009-10-23 11:12:19
C++代碼導出什麼樣的字符串? – 2009-10-25 22:56:10