asp教程.net c#调用托管dll和非托管dll文件的区别
托管dll文件,可以在dotnet环境通过 “添加引用” 的方式,直接把托管dll文件添加到项目中。然后通过 using dll命名空间,来调用相应的dll对象 。
非托管dll文件,在dotnet环境应用时,通过 dllimport 调用。
c# 调用非托管dll文件。dll文件是用c语言编写的。
如下:
1:结构定义
rditag_t
rditag_t结构定义了测点的结构
typedef struct _rditag_t
{
char tagname[rdi_max_tagname_len]; /*[in]*/
float val; /*[out]*/
int status; /*[out]*/
} rditag_t;
2:rditagname_t
rditagname_t定义了测点名类型
typedef char rditagname_t[rdi_max_tagname_len];
----------------------------------------------------
函数说明:
1:void rdi_read(rditag_t tags[], int count, int timeout);
参数
tags 读取数据点数组。
count 输入参数。
timeout 输入参数。
2: void rdi_read0(rditagname_t tagnames[], float values[], int statuses[], int count, int timeout);
参数
tagnames 输入参数。
values 输出参数。
statuses 输出参数。
count 输入参数。
timeout 超时值(毫秒)。
返回值
无。
--以下是源码。及供参考学习。不能用于商业盈利。
public const string dll_name = "rdiapi.dll";
public const byte rdi_max_tagname_len = 0x18;
public const int rdi_sts_failed = -1;
public const int rdi_sts_invalid_handle = -2;
public const int rdi_sts_invalid_tag = -5;
public const int rdi_sts_net_error = -3;
public const byte rdi_sts_ok = 1;
public const int rdi_sts_timeout = -4;
[dllimport("rdiapi.dll")]
public static extern int rdi_close();
[dllimport("rdiapi.dll")]
public static extern int rdi_init();
[dllimport("rdiapi.dll")]
public static extern int rdi_isopen();
[dllimport("rdiapi.dll")]
public static extern int rdi_open(string server, int port);
[dllimport("rdiapi.dll")]
--用c#编写的函数(注意参数[in, out] rditag_t[] tags 而不是 ref )
public static extern int rdi_read([in, out] rditag_t[] tags, int count, int timeout);
[dllimport("rdiapi.dll")]
public static extern int rdi_read0(rditag_t1[] tags, [in, out] float[] value_array, [in, out] int[] status_array, int count, int timeout);
[dllimport("rdiapi.dll")]
public static extern int rdi_uninit();
-- 用c#定义结构
[structlayout(layoutkind.sequential)]
public struct rditag_t
{
[marshalas(unmanagedtype.byvaltstr, sizeconst = 0x18)]
public string tagname;
public float val;
public int status;
}
-- 用c#定义结构
[structlayout(layoutkind.sequential)]
public struct rditag_t1
{
[marshalas(unmanagedtype.byvaltstr, sizeconst = 0x18)]
public string tagname;
暗影猎手失落的世界 最新版本v30.118.6.0
下载格里姆瓦勒完全版 安卓版v1.2.0
下载忍者武士暗影格斗无限金币版 安卓版v1.82.1
下载忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载创造与魔法免登录版 手机版v1.0.0760
创造与魔法是一款高度自由的沙盒冒险手游,该游戏采用了3D最新
创造与魔法gm版 安卓版v1.0.0760
创造与魔法是一款有英雄互娱运营的一款经营沙盒建造手游,该游戏
创造与魔法变态无敌版 v1.0.0760
创造与魔法是一款3DQ版的沙盒模拟建造手游,在这里玩家需要适
腾讯普通话小镇游戏 安卓版v2.2.5
普通话小镇是由腾讯游戏追梦计划推出发行的模拟经营类型普通学习
海岛村 最新版v1.0
海岛村是一款非常好玩的模拟经营类手游,玩家在游戏中将会有一个