C++封装的函数
int api_ihuReadCurrentValue(long serverhandle,int number_of_tags,char **tagnames,IHU_TIMESTAMP *timestamp,int *tagerrs,char *retmessage);其中
IHU_TIMESTAMP是一个结构体,里面只有两个long类型的变量。
我在C#中先是定义了IHU_TIMESTAMP结构体
[StructLayout(LayoutKind.Sequential)]
public Struct IHU_TIMESTAMP
{
public int Seconds;
public int Seconds1;
}
然后我在C#中这样调用:
[DllImport("IHAPIDLLS.dll", EntryPoint = "api_ihuReadCurrentValue", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern int Api_ihuReadCurrentValue(int serverHandle, int number_of_tags, ref string[] tagnames, out Single tagvalues, ref IHU_TIMESTAMP timestamps, out int tagerrs, out string retmessage);
结构报错:尝试读取或者写入受保护的内存。通常指示该内存已损坏。
请问 是这样子调用吗?C++翻译成C#的类型对吗?小弟对C#调用C++的dll不熟悉,跪求各位大牛解答啊!
C# 函数参数ref IHU_TIMESTAMP timestamps 不对 改为 intptr 具体如何使用intptr需要自己去学一下
或者改C++函数 这个参数IHU_TIMESTAMP *timestamp 改为,IHU_TIMESTAMP ×tamp 指针改为引用C#接口不变
你好,这个问题我已经解决了,谢谢你啊。
印象中c++代码为非托管代码,你的代码里面加一下unsafe
参考一下:http://msdn.microsoft.com/zh-cn/library/chfa2zb8(v=vs.80).aspx