找回密码
 注册
Simdroid-非首页
查看: 540|回复: 9

[积分贴存推荐] 【讨论】关于CIN接口的一个小问题 +9.1

[复制链接]
较劲到底 该用户已被删除
发表于 2003-12-9 23:09:30 | 显示全部楼层 |阅读模式 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-12-10 09:11:27 | 显示全部楼层 来自 辽宁沈阳

回复: 【讨论】关于CIN接口的一个小问题

Simdroid开发平台
在Visual C++下的编译过程:
a、    先创建一个Win32动态链接库文件,在Project菜单中打开“Add Project>>Files...”项,从LabVIEW子目录Cintools/Win32中选择cin.obj,labview.lib,lvsb.lib和lvsbmain.def这四个文件,它们是编译CIN节点C语言程序时必须的。
b、   在Project>>Settings菜单中,将“Settings for:”选项设置为“All Configurations”,“C/C++>>Category:”项设为“Preprocessor”。然后把cintools所在目录加入到“Additional include directories:”项中。
c、   将“C/C++>>Category:”项设为“Code Generation”,并将其“Struct Member Alignment:”、“User Run-Time Library:”两个子项分别设置为“1 Byte”和“Multithreaded DLL”。
d、   选择“Custom Build”项,将“Build Commands Field:”设为“Cintools所在目录\lvsbutil $(TargetName) –d $(WkspDir)\$(OutDir)”,将“Output File Field:”设为$(OutDir)$(TargetName).lab。
设置好上述参数后,就可以在VC中对CIN节点C语言程序进行编译了,将会产生一个后缀为.lsb的目标代码文件。
  
注意空格,将上面的东西直接拷贝

评分

1

查看全部评分

较劲到底 该用户已被删除
 楼主| 发表于 2003-12-10 13:42:12 | 显示全部楼层 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
较劲到底 该用户已被删除
 楼主| 发表于 2003-12-10 15:11:15 | 显示全部楼层 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
南燕 该用户已被删除
发表于 2004-5-11 05:59:40 | 显示全部楼层 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-5-11 18:54:00 | 显示全部楼层 来自 北京海淀

回复: 【讨论】关于CIN接口的一个小问题

直接写个DLL,何必用CIN呢
南燕 该用户已被删除
发表于 2004-5-11 20:18:26 | 显示全部楼层 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-5-12 08:52:20 | 显示全部楼层 来自 江苏南京大学

回复: 【讨论】关于CIN接口的一个小问题

1。// 新建一个空的Win32 Dll 工程
加入新的cpp,写入下面代码
  _declspec(dllexport) int sum(int a, int b)
{
  return a+b;
}
Build出一个dll:sum.dll
2。// 新建一个新的Win32 Console程序
选择Simple Console Application,修改main函数所在的cpp:
#include "stdafx.h"
  
// for IO
#include <iostream>
using namespace std;
  
// for base type and LoadLibrary
#include <WINDOWS.H>
  
// define function pointer which will point to sum(a, b)
typedef int(*Func)(int,int);
int main(int argc, char* argv[])
{
  HMODULE dll = :oadLibrary("sum.dll");// 加载刚才那个dll,路经要对
  if(dll)
  {
    Func f = (Func)GetProcAddress(dll, "?sum@@YAHHH@Z");// 加载那个sum函数
    if(f)
      cout<<f(3, 4);     // 等价于调用 sum(3, 4)
    else
      cout<<"function call error";
  }
  else
    cout<<"lodad error";
}
  
Build & Execute
3。上面一个不便的地方就是GetProcAddress,第二个参数是个很复杂的字符串,需要事先用dumpbin sum.dll /exports得到sum函数的实际名称
   所以,一般会在最上面写dll时,导出函数前面不仅加上已有的红字表示导出,还要加上extern "C" ,表示以C方式编译,因为C方式编译时,函数名在库中和在程序代码中会保持一致,不像C++生成新的编码后的函数名。
那么,上述的dll函数声明就是
extern "C" _declspec(dllexport) int sum(int a, int b)
而调用程序的GetProcAddress行就改为:
Func f = (Func)GetProcAddress(dll, "sum");
4.编译为dll
5。在lv中用call library调用

评分

1

查看全部评分

madrain 该用户已被删除
发表于 2004-6-17 08:51:11 | 显示全部楼层 来自 北京
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-8-27 10:08:00 | 显示全部楼层 来自 湖南长沙

回复: 【讨论】关于CIN接口的一个小问题 +9.1

大家好,我在使用LABVIEw调用C程序时,用cin节点方法,却出现了如下问题,Linking...  
Performing Custom Build Step on .\Debug\sum1.dll  
multiple name arguments not allowed  
Error executing c:\windows\system32\cmd.exe.  
  
sum1.dll - 1 error(s), 0 warning(s)  
请高手不吝赐教,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-15 08:22 , Processed in 0.049349 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表