注意:在LabView中调用DLL函数时,一定要指定对应的参数类型,而不是选择“Adapt to Type”,否则会出错,不知道为什么书上是要选择“Adapt to Type”。

以下做个参考:

转自:https://wenda.so.com/q/1454926221721277?src=170

指针 (Pointer)是在C语言中很重要的一种资料型态,并且是被广泛的被使用,所以当要用LabVIEW去呼叫C/C++所开发的DLL时,一定会遇到指针的问题,接着我会以传递及接收指标这两个方向来说明。

  一、传递指针到 DLL
  ①传递整数 (Integer)指标
  如果以下是我们呼叫的函式
  void ReturningValuesByReference_Integer(int x, int y, int *sum);
  我们要将资料传递到 *sum中,所以请在Data type栏位选择”Signed 32-bit Integer”,然后在Pass栏位选择”Pointer to Value”,如下图所示。
  

  ②传递阵列 (Array)资料
  我们以下列函式为例
  int PassingParamters_ArrayOfIntegers (int x[], int length);
  我们要将资料传递到阵列,此时也要使用指标的方式来传,请你在 Type栏位选择”Array”,Data type栏位选择”Singed 32-bit Integer”,Array format栏位选择”Array Data Pointer”,如下图所示。

  
  ③传递字串(String)指标
  以下列函式为例
  int PassingParamters_String (char *str);
  当我们要将资料传递到 *str中,请你在String format栏位选择”C String Pointer”,如下图所示。

  
  ④传递结构(Struct)资料
  以下例函式为例
  void ReturningValuesByReference_SimpleStruct (struct simpleStructCircle circle, struct simpleStructCircle *largerCircle);
  如果是传递结构的话,只需要将原本结构中的内容依序传入即可,以本函式为例 ”circle” 中含有三个浮点数分别是 x, y, radius,所以只要依序宣告即可,但若是遇到结构指标,请你在 Type 栏位选择 ”Adapt to Type” , Data format 栏位选择”Handles by Value”,如下图所示。
  

  二、从 DLL接收指标
  ①函式回传指标
  如果函式程式码如下
  int * ReturnAValue_PointerToInteger(void)
  {
  int *x = (int *) malloc(sizeof(int));
  *x = 5;
  return x;
  }
  所以我们可以知道函式本式回传整数指标,请你在 Type栏位选择” Numeric”,在Data type栏位选择”Signed Pointer-sized Integer”,如下图所示。
  

  ②以Reference型式回传
  我们以下列程式码为例
  void ReturningValuesByReference_Integer (int x, int y, int *sum)
  {
  //sum is a pointer
  *sum = x + y;
  }
  由程式可知,运算后的资料会放在*sum当中,所以请你在Data type栏位中选择”Pointer to Value”即可

LabView和DLL中的参数问题的更多相关文章

  1. DLL中传递STL参数,vector对象作为dll参数传递等问题(转)

    STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下 ...

  2. DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]

    最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况.这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中 ...

  3. “RazorEngine.Templating.TemplateCompilationException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理

    错误信息: "RazorEngine.Templating.TemplateCompilationException"类型的异常在 RazorEngine.NET4.0.dll 中 ...

  4. python 调用dll中c或c++语言的带指针方法,

    在项目开发中遇到了,python需要去调用一个动态链接库dll中的c++方法.这个方法的参数为一个指针类型的参数,一个bool类型参数, 在python中并未对数字类型进行区分. int LP_Agc ...

  5. DLL中调用约定和名称修饰(一)

    DLL中调用约定和名称修饰(一) 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议.这种协议规定了该语言的函数中的参数传送方式.参数是否可变和由谁来 ...

  6. Qt调用dll中的功能函数

    声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下:   ...

  7. 在C++中调用DLL中的函数 (3)

    1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...

  8. 在C++中调用DLL中的函数 (2)

    应用程序使用DLL可以采用两种方式: 一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息. Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin. ...

  9. C#反射动态调用dll中的方法

    //加载程序集(dll文件地址),使用Assembly类 Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirec ...

随机推荐

  1. HTML实体大全

    HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集. ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 7 比特 ASCII. ISO-8859-1 ...

  2. Vscode 修改为中文语言

    1 官网下载最新版的vscode : https://code.visualstudio.com/Download 2 安装之后, 按键 F1  搜索框 输入 language   选择 config ...

  3. LNMP ftp 可以登录无权限操作?

    服务器环境: LNMP ftp : LNMP ftp一键安装 嘛卖批啊! 解决办法:  登录服务器.执行以下命令 chattr -i /home/wwwroot/default/.user.ini c ...

  4. 有道云笔记同步IT笔试面试资源

    有道云笔记同步资源 放在手机上ipad或者电脑上看..特别方便...精心整理..暂时只有c++的..希望大家喜欢 暂时只扒了一些c++的..java的随后扒 主要都是取自<程序员面试笔试宝典&g ...

  5. 开源的PaaS方案:在OpenStack上部署CloudFoundry (五)常见问题

    部署CloudFoundry可能遇到的问题 1. Bosh 报告 OpenStack API Request Entity Too Large error 解决办法,修改/etc/nova/api-p ...

  6. yield方法

    yield方法的作用是房企当前的CPU资源,将他让给其他的任务去占用CPU执行时间,但房企的时间不确定,有可能刚刚放弃,马上又获得CPU时间片. package yield; /** * Create ...

  7. JS-随机div颜色

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. php中关于时间的用法

    一.时间戳相关:        当前时间戳:time();         把时间戳转换为时间显示:date("Y-m-d H:i:s", $a);         把日期时间转换 ...

  9. C# Global.asax文件里实现通用防SQL注入漏洞程序(适应于post/get请求)

    可使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件来实现表单或者URL提交数据的获取,获取后传给SQLInje ...

  10. oracle的START WITH CONNECT BY PRIOR用法

    转自:https://www.cnblogs.com/linjiqin/archive/2013/06/24/3152674.html Oracle 树操作(select…start with…con ...