首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用LOADLIBRARY加载64位Matlab R2017b中的visa32.dll和visa.h

用LOADLIBRARY加载64位Matlab R2017b中的visa32.dll和visa.h
EN

Stack Overflow用户
提问于 2018-07-17 08:33:44
回答 1查看 1.2K关注 0票数 1

在32位Windows 7上使用Matlab R2015b,LOADLIBRARY运行得很好:

代码语言:javascript
复制
library = 'C:\Windows\System32\visa32.dll';
headerFile  = 'C:\Program Files\IVI Foundation\VISA\WinNT\include\visa_Matlab.h';
loadlibrary(library, headerFile, 'alias','visa32');

我可以在'visa32.dll‘中使用函数,例如,

代码语言:javascript
复制
defaultRm = 0;
[err, defaultRm] = calllib('visa32', 'viOpenDefaultRM', defaultRm);

vi = 0;
InstrAddr = 'GPIB0::29::INSTR';
pInstrAddr = libpointer('int8Ptr', [int8( InstrAddr ) 0] );
[err, tempVar, vi] = calllib('visa32', 'viOpen', defaultRm, pInstrAddr, 0, 0, vi);

打开仪器的通讯端口。

但是在我升级到64位的Windows 7和Matlab R2017b之后,LOADLIBRARY就不能再工作了,即使我已经使用了62位版本的'visa32.dll‘和'visa.h’。有两个问题:

(1)首先,Matlab抱怨没有安装正确的编译器,甚至无法运行LOADLIBRAY。按照他们的在线指示安装MinGW-w64编译器的附件。这个问题似乎已经解决了。

(2) LOADLIBRAY似乎能够运行,但是它有以下错误:

未能解析类型'( fastcall )、viOpenDefaultRM ( ViPSession vi‘原始输入'( fastcall ) viOpenDefaultRM ( ViPSession vi’)在输入的第217行从文件C:\Program (x86)\IVI Foundation\VISA\WinNT\Include\visa.h错误解析参数中找到的函数属性函数可能无效。..。

我想知道是否有人能帮上忙。事先非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-07-30 09:59:56

在MATLAB中使用VISA库进行仪器控制的优点是:直接(即更快)访问端口,能够更好地使用GTL (到本地)和处理通信错误等。

代码语言:javascript
复制
  loadlibrary('visa32.dll','visa.h','alias','visa32');
  [err, defaultRm] = calllib('visa32', 'viOpenDefaultRM', defaultRm);

然而,LOADLIBRARY的局限性给我们带来了很多麻烦,对于不同的Windows体系结构,LOADLIBRARY的工作原理也不尽相同。下面是在32位和64位Windows上测试过的解决方案:

1. MATLAB中的C++编译器:

   a.这只影响64位MATLAB;

必须安装一个称为“MinGW-W64编译器”的MATLAB外接程序:

这对于R2017b来说比较容易,只需使用     的Add管理器;

     ii.对于R2017b之前的MATLAB版本,很难:

      下载并安装“MinGW-W64”:

      tdm-gcc.tdragon.net/下载

      sourceforge.net/projects/tdm-gcc/postdownload?source=dlp

      sourceforge.net/projects/mingw/files/

然后,      配置MATLAB,如以下所述:

      de.mathworks.com/help/matlab/matlab_external/compiling-c-mex-files-with-mingw.html

      de.mathworks.com/help/matlab/matlab_external/install-mingw-support-package.html

      de.mathworks.com/matlabcentral/answers/313298-i-already-have-mingw-on-my-computer-how-do-i-configure-it-to-work-with-matlab

 2.签证库文件:

   a.不同结构的动态链接库文件;

   b.该库文件可在安装NI-488.2驱动程序后使用(最新版本是'NI4882_1760f0.exe';

   c.用于32位Windows和32位MATLAB:

     i.库文件:‘visa32.dll’

     ii.位置:‘C:\Windows\System32 32\’

   d.用于64位Windows和64位MATLAB:

     i.库文件:‘visa64.dll’

     ii.位置:‘C:\Windows\System32 32\’

     Ⅲ.备注:

      1.根据NI的网站,64位Visa32.dll位于C:\Windows\SysWOW64 64中,这是不对的;

或者,一个64位版本的‘visa32.dll’,比NI-488.2驱动程序安装的‘visa64.dll’还小,可以从:https://www.azdll.net/files/visa32-dll.html下载。

 3.头文件:

   a.加载签证库需要两个头文件:‘visa.h’和‘visatype.h’;

   b.安装NI-488.2驱动程序后,两者都可用;

对于32位   ,这两个文件都在‘c:\Program\\VISA\bit 64\include’中。

对于64位Windows,这两个文件都位于:‘C:\程序文件(X86)\\   \WinNT\   ’

   e.‘visatype.h’可以按原样使用;

‘visa.h’必须修改为MATLAB的LOADLIBRARY。对“Visa.h”所作的改动如下:

     i.在头文件的开头添加以下内容:

代码语言:javascript
复制
  #ifdef _WIN64
    #define __fastcall
  #endif

     ii.屏蔽'viInstallHandler‘和'viUninstallHandler',因为它们不是常用的;

     Ⅲ.删除“,.”由于LOADLIBRARY (https://de.mathworks.com/matlabcentral/answers/103180-why-do-i-get-warnings-when-loading-a-dll-with-loadlibrary-in-matlab-7-13-r2011b)不支持以下函数:

viPrintf,viSPrintf,viScanf,viSScanf,viQueryf

     iv.在以下函数中,将“ViVAList”替换为“ViConstBuf”:

viVPrintf,viVSPrintf,viVScanf,viVSScanf,viVQueryf

将“viVxiServantResponse”函数替换为:

代码语言:javascript
复制
#ifndef _WIN64
    ViStatus _VI_FUNC viVxiServantResponse(ViSession vi, ViInt16 mode, ViUInt32 resp);
#endif

修改后的‘visa.h’,改名为‘visa_Matlab.h’,可以从Matlab.h下载。

示例:

代码语言:javascript
复制
  % ‘visa32.dl’ or ‘visa64.dll’, ‘visa_Matlab.h’ and ‘visatype.h’ must be 
  % available in the local directory
  archstr = computer('arch');
  if ~isempty(strfind(archstr, 'PCWIN64')) || ~isempty(strfind(archstr, 'win64'))
    dllName = 'visa64';
  else
    dllName = 'visa32';
  end
  headerFileName = 'visa_Matlab.h';
  loadlibrary ([dllName '.dll'], 'visa_Matlab.h','alias',dllName);
  visaFunctions = libfunctions(dllName,'-full');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51376698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档