@cyysu
2018-04-21T05:23:32.000000Z
字数 1370
阅读 977
- 时间:2018年4月21日09:40:13
- 作者:Kali
- 邮箱:cyysu.github.io@gmail.com/2869905223@qq.com/微信lwyx1413
- 版本:6.0
- 描述:Native模式创建一个功能/功能块
ECLR+Multiprog开发
继续在我们第一次创建的工程里面添加一个Native代码,如下
// Native模式添加一个功能
[FUNCTION("INT")]
[Native]
public class myAddNative
{
public static System.Int16 __Process(
[VAR_INPUT("INT")] System.Int16 IN_1,
[VAR_INPUT("INT")] System.Int16 IN_2)
{
return 0xa5;
}
}
工程设置里面添加下面脚本
echo #### execute the native library builder
copy "$(SolutionDir)\lib\mscorlib.dll" "$(TargetDir)"
echo #generate .cpp cli.cpp and .h
"$(SolutionDir)\tools\LibBuilder" "$(TargetDir)\$(TargetFileName)"
echo copy and rename .cpp
copy "$(TargetDir)\$(TargetName)-template.cpp" "$(TargetDir)\$(TargetName).cpp" /Y
echo copy and rename .h
copy "$(TargetDir)\$(TargetName)-template.h" "$(TargetDir)\$(TargetName).h" /Y
编译输出的结果如下
生成目录中的文件
现在我们用我们第一次创建的Multiprog工程,添加这个功能
编译可以正常编译过去,但是下装的时候出现了这个问题,表示eCLR下面并没有我们这个库,也就是我们的库还没有在eCLR中进行注册,同时这个实验也表明了在Native模式下代码实现的部分是要和eCLR绑定在一起的。
下面我们开始在eCLR中实现这一部分代码,由于测评文件是从网上下载的,与目前安装的版本不一致,需要安装SP1补丁,下载参考如下文章
https://blog.csdn.net/yasi_xi/article/details/41514521
下载下来的文件如下:
安装完成之后的版本变成如下就正确了。
然后清理项目,重新编译生成,生成的信息如下:
下面将C#生成的接口文件拷贝到我们的eCLR中,如下
实现的步骤如下:1.添加头文件 2.增加注册函数
添加C++逻辑代码
运行情况如下
那么怎么证明这个确实是调用的我们写的C++的代码呢?下面我们来调试一下eCLR就可以发现了。这里需要注意的是要将Multiprog中的调试开关关掉,否则会读取不到PLC
到此我们的Native模式创建功能这一部分就完事了。
以上内容有笔者自己编写,也有摘自互联网。摘自互联网部分笔者都会仔细阅读,确保符合笔者当时测试情况进行编写,当然在学习的过程中不可避免的有理解不到位的地方,还请读友批评指正。
支付宝 微信