首页 新闻 搜索 专区 学院

C#调用C++的dll

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-05-20 09:17

//方法: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[]都报同样的错误,请问这到底是什么为什么?

这个问题困扰了我很久了,跪求大侠们的解答。谢谢!

ljcheibao的主页 ljcheibao | 初学一级 | 园豆:132
提问于:2013-05-06 20:55
< >
分享
所有回答(1)
0

CallingConvention.Cdecl 一般的dll都是stdcall的

用类似 这个http://blog.csdn.net/Donjuan/article/details/3865026 自动生成试试

2012 | 园豆:20669 (高人七级) | 2013-05-07 08:44

社区有好多这样的问题,特整理了一个 http://www.cnblogs.com/2018/archive/2013/05/07/3064086.html 使用工具辅助可以更清楚这个是咋回事

支持(0) 反对(0) 2012 | 园豆:20669 (高人七级) | 2013-05-07 08:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册