首页 新闻 搜索 专区 学院

C#调用C++的dll

0
悬赏园豆:20 [已解决问题] 解决于 2013-04-25 11:33

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不熟悉,跪求各位大牛解答啊!

ljcheibao的主页 ljcheibao | 初学一级 | 园豆:132
提问于:2013-04-11 13:36
< >
分享
最佳答案
0

C# 函数参数ref IHU_TIMESTAMP timestamps  不对 改为 intptr  具体如何使用intptr需要自己去学一下

或者改C++函数  这个参数IHU_TIMESTAMP *timestamp  改为,IHU_TIMESTAMP &timestamp  指针改为引用C#接口不变

收获园豆:15
Daywei | 小虾三级 |园豆:551 | 2013-04-14 11:24

你好,这个问题我已经解决了,谢谢你啊。

ljcheibao | 园豆:132 (初学一级) | 2013-04-14 11:45
其他回答(1)
0

印象中c++代码为非托管代码,你的代码里面加一下unsafe

参考一下:http://msdn.microsoft.com/zh-cn/library/chfa2zb8(v=vs.80).aspx

收获园豆:5
風吹云动 | 园豆:69 (初学一级) | 2013-04-11 23:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册