zoukankan      html  css  js  c++  java
  • 5.07-09制作DLL植入labVIEW

    上网查资料,VS创建WIN32 DLL

    一、为什么需要dll

    代码复用是提高软件开发 效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架, ATLMFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”。“白盒复用”的缺点 比较多,总结起来有4点。

    1. 暴露了源代码;
    2. 容易与程序员的“普通”代码发生命名冲突;
    3. 多份拷贝,造成存储浪费;
    4. 更新功能模块比较困难。

    实际上,以上4点概括起来就是“暴露的源代码”造成“代码严重耦合”。为了弥补这些不足,就提出了“二进制级别”的代码复用。使用二进制级别的代码复用一定程度上隐藏了源代码,对于缓解代码耦合现象起到了一定的作用。这样的复用被称为“黑盒复用”。

    Windows操作系 统中有两种可执行文件,其后缀名分别为.exe.dll。它们的区别在于,.exe文件可被独立的装载于内存中运行;.dll文件却不能,它只能被其它 进程调用。然而无论什么格式,它们都是二进制文件。上面说到的“二进制级别”的代码复用,可以使用.dll来实现。

    与白盒复用相 比,.dll很大程度上弥补了上述4大缺陷。.dll是二进制文件,因此隐藏了源代码;如果采用“显式调用”(后边将会提到),一般不会发生命名冲突;由 .dll是动态链接到应用程序中去的,它并不会在链接生成程序时被原原本本拷贝进去;.dll文件相对独立的存在,因此更新功能模块是可行的。

    说明:实现“黑盒复用”的途径不只dll一种,静态链接库甚至更高级的COM组件都是。本文只对dll进行讨论。

     

    Inserted from <http://www.cnblogs.com/laogao/archive/2012/12/07/2806528.html>

    Stdafx-预编译头文件

    stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。

    所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(Windows.HAfxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

     

    Inserted from <http://baike.baidu.com/link?url=RzjR11RK_TcreehmVy_Gf4zyb2B2edWEzpMSHaBufwoZbQHQdttHTK57iV69twf621NKtZxqkWAJF3TA6AtV6q>

    labview调用dll

    只支持C语言,不支持引用,只支持导出函数,导出函数声明需要用 extern "C"{} 修饰,不然会提示在DLL中找不到指定函数,特别注意C语言变量类型和LABVIEW中变量类型的对应关系

    labview固然强大,但是有些功能实现起来也是比较麻烦的。我们想使用其他语言或者平台下的现成的程序,怎么办呢?

    可以通过下面的集中办法来实现:

        1、调用公式节点 functions- All fuctions-structures

        2、调用C语言代码(code interface node  functions- All fuctions-structures  代码接口节点

        3、调用matlab脚本节点   functions- All fuctions-analyze-mathematics-formula

        4、调用windows API函数(call library function node 调用库函数节点 .dll

        5、调用ActiveX控件(微软的)   使用ActiveX容器,具体的实例可参见labview帮助文件里面的事件回调的浏览器的例子。

        6、调用.dll程序集或者共享库,通过.net容器来实现。

     

    Inserted from <http://blog.sina.com.cn/s/blog_0414b7360101jron.html>

    LV2010的函数选板中,已经找不到CIN函数了,对于习惯用C语言编程的朋友们可能会感觉不方便,当然CLN基本可以解决我们日常需要。

    最近在中国测控网论坛上看到一个帖子,才知道Labview2010只是没有在函数选板显示CIN函数,实际上仍然可以可以使用。

    下面详细介绍一下实现的方法:

    从帖子中得知,CIN函数位于下面的MNU文件中:

    通过工具菜单--》高级--》编辑选板,导入这个菜单文件,我们就可以看到CIN函数了。

     

    Inserted from <http://www.eeworld.com.cn/Test_and_measurement/2014/1105/article_9955.html>

     

    插入-子选板-链接到现有选板文件

    CIN在新版本labview 中已经不支持,没有此功能,建议全面使用CLN

    CreateDll 项目属性修改记录

    复制三个文件夹

    配置属性-C/C++-常规-附加包含目录-include 文件夹,其他类似设置暂时不做。

    注意,需要设置工作路径!因为存在内存读写,读写音频文件!而音频文件存在bin文件夹下

    测试记录

    将不需要的头文件全部删掉,并只测试MSPlogin 功能,成功

    将能够用labview改写的函数改写,实际需要用DLL的只有 run_asr()

    改写的函数包括:

    const char*  get_audio_file(void)

    const char* get_grammar(const char* filename)

    Dereferencing Pointers from C/C++ DLLs in LabVIEW

    版本

    创建于: 2010-1-18 下午3:13 作者 JervinJustin - 最后修改:  2011-11-1 下午5:06 作者 JervinJustin

    LabVIEW Add-on Dev Center » Calling External Code » Calling C/C++ DLLs » Dereferencing Pointers

     

     

    Inserted from <https://decibel.ni.com/content/docs/DOC-9091>

    解决fopen()不执行的问题。

    已查明:将地址转换为绝对地址后成功执行

    已查明:LabVIEW 中调用DLL,使用 fopen()文件路径只支持绝对路径,不支持相对路径!

    当设置相对地址时,原点地址可能是:1)系统路径2)执行文件路径3)当前软件的入口路径

     

    labview中调用DLL就得遵守它的规则,DLLfopen 相对路径的原点地址在

    D:Program Files (x86)National InstrumentsLabVIEW 2014中,这是LabVIEW的入口路径!

    故要将wav文件夹复制到此路径下,这一步可由labview完成!!!

     

    0524修改:DLL地址原点会根据你加载VI的方式不同而不同,当你先打开labview.exe时是一回事,当你直接打开.vi时又是一回事。

     

    关键代码

    const char* asrfile = "./wav/iflytek09.wav";//选择待识别的语音文件

    labview读取文件出现错误解决方式

    计算机生成了可选文字: LabVIEW:  E:WS2013XCreateDLLXDebug XLzsData.dat  Fni.com

    解决:改用文本文件读写,方便一些

    fopen not working when called through dll-The DLL can not open a file

    TestStand passes the filename parameter to the DLL.  I ended up fixing the problem by hard coding the filename into the function so everything is good now

     

    Inserted from <http://forums.ni.com/t5/NI-TestStand/fopen-not-working-when-called-through-dll/td-p/2931014>

    ctycheer 2013.09.11 02:25

    hello. I meet a trouble about dll.

    I make a dll in C++. the dll open a file for get  data.

    in my C++ project ,I can use the dll for opening a file in the Metatrader 5 data path to get data.

    But. I  can't do the same things in Metatrader5. I make a scripts in Metatrader5 ,the scripts use the dll to open a file to get data. But it's not work.  My OS is  Windows7.

    who could tell me why?

    how can I change data between dll and EA 

     

    Inserted from <https://www.mql5.com/en/forum/13871>

    DLL中添加文件读写的代码,首先要写一句FILE* pData=fopen(char* filename,char* mode),我发现在DLL中如果文件路径不写绝对路径,文件指针就为NULL

    It may caused by the relative path issue.

     

    来自 <https://www.mql5.com/en/forum/13871>

     

     

    相对路径输入规范

    计算机生成了可选文字: E:XVS2013XCreateDLLXDebugXCreateDLL.dI  EN DependencvXCreateDll

    需要复制msc.dll 文件到.dll文件同级目录下

    VS 后期生成事件

    可以看到有一个列表(含有“宏”和“值”列),而“宏”下的“TargetPath”对应的值就是当前项目生成的 dll/exe 文件对应的物理路径,双击该行,在上方的方框中就出现了“$(TargetPath)”,好了不罗嗦了。

    直接在每个项目的生成事件窗口中的“后期生成事件命令行”写下“copy $(TargetPath) E:projectsMyDemoJoeyLibsIdleTestdlls”,并在下方的 运行后期生成事件 选择 成功生成时 搞定。

     

    Inserted from <http://www.cnblogs.com/FreeDong/p/3406737.html>

    严重问题:通过不同方式加载DLL导致相对路径随用户打开方式变化而变化!

    通过合成方法生成绝对地址问题(VS

    考虑放弃使用相对路径,而使用绝对路径。


  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 290. Word Pattern
    Leetcode 205. Isomorphic Strings
    Leetcode 107. Binary Tree Level Order Traversal II
    Leetcode 102. Binary Tree Level Order Traversal
    三目运算符
    简单判断案例— 分支结构的应用
    用switch判断月份的练习
    java基本打印练习《我行我素购物系统》
  • 原文地址:https://www.cnblogs.com/lizhensheng/p/11241936.html
Copyright © 2011-2022 走看看