在前一篇写了Win32:三菱FX3U/FX5U读写软元件方法和注意事项关于软元件读写的注意事项。
本篇主题是关于32位的MX插件和64位的插件使用需要注意的事项。
- 类型的切换
在32位的时候,我们创建的方式如下。
IActUtlType* mp_IProgType;
HRESULT hr = CoCreateInstance( CLSID_ActUtlType, NULL, CLSCTX_INPROC_SERVER, IID_IActUtlType, (LPVOID*)&mp_IProgType);
在64位的时候,我们要用64位的数据类型。
IActUtlType64* mp_IProgType;
HRESULT hr = CoCreateInstance( CLSID_ActUtlType64, NULL, CLSCTX_LOCAL_SERVER, IID_IActUtlType64, (LPVOID*)&mp_IProgType);
- 包含头文件的变化
在32位的时候,如下
#include "ActProgType_i.h" // For ActProgType Control
#include "ActUtlType_i.h" // For ActProgType Control
#include "ActDefine.h" // ACT Common Macro Header
在64位的时候,如下
#include "Include\MELSEC\Wrapper\ActProgType64_i.h" // For ActProgType Control
#include "Include\MELSEC\Wrapper\ActUtlType64_i.h" // For ActProgType Control
#include "Include\MELSEC\ActDefine.h" // ACT Common Macro Header
- 实现文件的包含变化
在32位的时候,如下
#include "ActUtlType_i.c"
在64位的时候,如下
#include "Include\MELSEC\Wrapper\ActUtlType64_i.c"
- 调用位置注意事项
32位的时候,这些接口是可以在UI线程和工作线程里面调用的,不管是创建实例/打开/读写。
但是用64位的插件,这些接口都只能在UI主线程里面调用,否则不管是创建实例/打开/读写都会失败。64位的MX插件不支持在工作线程里面调用。
当然要解决这些这并不是什么难事,只需要自己包装一层即可,比如独立成进程,然后跟这个进程通讯。当然也可以采用其他的通讯方式了,比如socket跟PLC通讯了。
如果遇到有什么疑问,可留言或站内私信消息。