//方法:api_ihuReadRawDataByTimeStr
//功能:查询报警数据
//参数说明:
//long serverhandle in 连接句柄
//char *tagnames in 标签点名
//char **tagvalues out 字符串数组,查询结果值
//IHU_TIMESTAMP *timestamps out 数组,查询结果时间戳
//返回:
//>0--IH函数返回错误
//0--成功
//<0-失败,其中-50:异常,-100:加载错误
C#中的声明:
[DllImport("IHAPIDLLS.dll", EntryPoint = "api_ihuReadRawDataByTimeStr", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int Api_ihuReadRawDataByTimeStr6(int serverhandle,[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0, ArraySubType = UnmanagedType.LPStr)] string[] argv, IntPtr timestamps2)
但是调用的时候报错:尝试读取或者写入受保护的内存。
请问这个输出类型的字符串数组char**对应C#中的哪个类型?
另外,我尝试着把char**这个参数改成ref IntPtr或者IntPtr、IntPtr[]、ref IntPtr[]、out IntPtr[]都报同样的错误,请问这到底是什么为什么?
这个问题困扰了我很久了,跪求大侠们的解答。谢谢!
CallingConvention.Cdecl 一般的dll都是stdcall的
用类似 这个http://blog.csdn.net/Donjuan/article/details/3865026 自动生成试试
社区有好多这样的问题,特整理了一个 http://www.cnblogs.com/2018/archive/2013/05/07/3064086.html 使用工具辅助可以更清楚这个是咋回事