【发布时间】:2013-04-12 18:33:50
【问题描述】:
我有一个用 C 语言编写的 DLL 文件。我尝试在我的 C# 代码中使用 C DLL (ImportDLL)。我的方法返回参数。 C 方法被正确调用,但它在处理后崩溃并给出错误**"System.AccessViolationException: Attempted to read or write protected memory.
这通常表示进程完成后其他内存已损坏"**。
我的 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 ...
);
有谁知道问题出在哪里?
【问题讨论】:
-
你试过用谷歌搜索这个吗?我很确定您已经找到了一些有用的答案,即使在 stackoverflow 中也是如此。
标签: c# c dll dllimport access-violation