我有一个用C编写的DLL
文件。我尝试在我的C#代码中使用C DLL(ImportDLL)。我的方法返回参数。 C法是正确调用,但过程中坠毁,并给出错误**"System.AccessViolationException: Attempted to read or write protected memory.
AccessViolationExceptiond:试图读/写保护的内存
这通常是指示其他内存已损坏“**过程完成之后。
我的C声明
int preProcessAndBestImagesC(
char* ...,
size_t* ...,
char** ...,
size_t* ...,
(struct)* ...,
size_t* ...,
int** ...,
(struct)** ...,
int ...,
int printStatus
);
我C#声明
[DllImport(@"abc.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true, BestFitMapping = true, EntryPoint = "xxx")]
[return: MarshalAs(UnmanagedType.I4)]
unsafe private static extern int xxx(
String p_ ...,
[MarshalAs(UnmanagedType.I2)] out UInt16 p_numImageFilesOrDirs,
String[] p_vecImageFilesOrDirs,
[MarshalAs(UnmanagedType.I2)] out UInt16 ...,
[MarshalAs(UnmanagedType.LPArray)] out (struct)[] ...,
[MarshalAs(UnmanagedType.I2)] out UInt16 ...,
out Int16[] ...,
[MarshalAs(UnmanagedType.LPArray)] out (struct)[] ...,
[MarshalAs(UnmanagedType.I2)] Int16 ...,
[MarshalAs(UnmanagedType.I2)] Int16 ...
);
有谁知道问题是什么?
您是否尝试过Google?我很确定你已经找到了一些有用的答案,即使在这里在stackoverflow。 – 2013-04-11 08:23:34