COM 인터페이스의 일부 문자열 필드에 액세스하는 데 문제가 있습니다. 정수 필드를 호출해도 오류가 발생하지 않습니다. clientID()
, deviceID()
또는 key()
을 호출 할 때 이전 "보호 된 메모리를 읽거나 쓰려고했습니다." 오류가 발생합니다. (코드 here에서 공급) 여기서 PInvoke - 문자열 필드 값 읽기 - "보호 된 메모리를 읽거나 쓰려고 시도했습니다."
[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를 사용하고 있습니다. 그게 문제가 될 수 있을까요? –
나는 변화를 만들었지 만 같은 예외가있다 : ( –
어떤 종류의 문자열이 C++ 코드로 내보내 집니까? –