在Labwindows/CVI或c语言中如何调用别人写好的dll文件

如何在CVI中使用dll文件,只有dll,没有lib和h文件,请详细回答,万分感谢,这是我写的调用程序,
//声明
HINSTANCE D12dll = NULL;//开始准备导入DLL
int (__stdcall *SysInit)(unsigned int *ipbuff, unsigned int socket_num);

//导入DLL函数
void dll_inport(void)
{
if(D12dll == NULL)
D12dll = LoadLibrary("D12dll.dll"); //动态方式调用DLL
if(D12dll)
{
USB_Init = (int (__stdcall *)(unsigned int *ipbuff, unsigned int socket_num))GetProcAddress(D12dll,"SysInit");
// VC DLL采用__stdcall方式输出,而不是__cdecl方式,如果采用__cdecl方式,函数名直接为 "Sys_Init"

}
}
main()
{
int *ip=NUll;
int num=0;

SysInit(ip,num);
}
显示错误:
FATAL RUN-TIME ERROR:Dereference of null pointer

既然形参已经告诉你 要buffer  你就得给他buffer

(ipbuf 显然是 ipaddress buffer 存放ip地址缓存)  num设置合适大小

请定义 一个unsigned int 数组

请定义 一个unsigned int * 指针 指向数组

 

给你写了个 cvi 调用devcpp C语言写的dll  参数类型和你这 类似

(仅仅是简单的选择法对数组排序l)

 

 

追问

万分感谢,本人cvi小菜鸟,再问您一下,采集卡说明书中给的指令:
extern "c" DLLexport int _stdcall ConnectDel
(unsigned int socket_num);
其中socket_num为要操作的Scoket在DLL里对应的唯一编码,这个编码怎么看呢,还有该语句是什么意思,直接输入进去老是报错,应该怎么用,
不好意思啊,又麻烦您了

追答

这个就是 dll导出的函数 原型 声明

LoadLibrary 动态方式调用dll 不用管 extern "c" 和 DLLexport神马....

不需要输入
如果是静态调用dll内的函数才需要这个语句 但是是调用是要import导入(这个是dll的导出声明export,调用就要改导入import ,你不需要管这些)

编码 ..... 这个估计是 一个标识号
估计 建立socket时返回的一个编号
猜出 建立1号socket
connectdel就是删除socket
要删除建立的1号socket就ConnectDel(1) ......... 请去多看几遍说明书

追问

万分感谢,我先试试,不懂的还要麻烦您

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-26
1、编写程序时,包含(#include "什么.h") dll文件作者提供 的 头文件(.h文件) 。
程序里,便和普通函数调用一样,去调用它的函数。
2、程序编译时,链接 dll文件作者提供 的 (.lib文件) 库文件。当然,可以在源程序里把.lib 名字 写上,编译时自动去链接,例子:#pragma comment (lib, "什么.lib")
3、执行时,要有 .dll 文件. 放在当前文件夹或系统文件夹里。

如何在labwindows里调用外部dll文件
1,静态调用,必须有.dll .h .lib 三个文件,将3个文件拷贝到工程目录,在你的源文件中include .h文件,在工程项目上 右键 添加 .lib文件,就可以用dll中的函数了,函数原型在.h中。这种方法最普遍,一般都是这样用。2,动态调用,有.dll 一个文件就可以了,这个麻烦一些,要定义函数指...

Labwindows CVI 中怎么调用VC++写的库
1.利用VC++生成.dll文件和.lib文件 (1) 创建Win32 Dynamic-Link Library工程。工程名为Dll1。(2) 在Dll工程添加C++ Source File,文件名为Dll1。(3) 在Dll1.app文件中写代码如下: extern “C” _declspec(dllexport) int add(int a,int b) { return a+b; } extern “C” _...

labwindows\/cvi能不能加入第三方应用程序
在CVI中打开头文件,在编辑窗口可以看到文件的内容。从头文件源代码窗口的菜单栏中选择“Options”,再选择“Generate DLL Import Library”,会出现提示,通过浏览文件的方式选择DLL,生成导入library。CVI于是会创建导入library,这样在CVI环境中,您可以在编译链接的时候包含这个导入library。参考LabWindows\/CVI...

如何在LabWindows\/CVI中为DLL创建一个导入library
在CVI中打开头文件,在编辑窗口可以看到文件的内容。从头文件源代码窗口的菜单栏中选择“Options”,再选择“Generate DLL Import Library”,会出现提示,通过浏览文件的方式选择DLL,生成导入library。CVI于是会创建导入library,这样在CVI环境中,您可以在编译链接的时候包含这个导入library。参考LabWindows\/CVI...

如何使用Labwindows CVI?
为了深入理解和掌握Labwindows\/CVI的使用,让我们分步骤进行详细说明。首先,您需要访问NI网站并下载安装CVI。随后,创建一个新的工程,并开始构建用户界面。双击打开设置界面,确保在CALLBACK FUNCTION中已设置名称_callback,以便为用户界面中的各个功能块配置回调函数。设计控件,如果您的应用需要实现控件回调...

labview中怎么调用c++写的程序啊?
可以把C++功能封装成DLL,然后使用LabVIEW的【调用库函数节点】来间接实现。或者你的C++程序编译成.exe文件,可以使用LabVIEW的【执行系统命令节点】来直接执行.exe文件 另一个变通的方法是直接使用LabWIndows\/cvi,它有很多跟LabVIEW类似的控件,也可以直接调用LabVIEW的控件,但是完全符合C\/C++语法。

CVI,labwindows定义
Labwindows\/CVI8.0是美国NI公司出品的虚拟仪器设计软件,是标准的C语言,加很多功能块构成的,使用很方便。1、在用Tab键移动光标时,是按照 CVI自动根据.uir文件生成的那个.h文件中定义的控件ID移动的,打开那个.h文件你会看到#define PANEL 1 #define PANEL_…… n(n是整数,为控件ID),光标就是...

labwindows\/cvi现在使用哪个编译器
需要注意的是,如果您需要调用CVI编译的静态库文件您同样需要在您的工程中包含.obj文件或者.c文件。对于该种应用可以参考以下链接:KnowledgaBase 2TDFEPSJ: I Get Error -86 When I Try to Use a Static Library Created in CVI. Why?6. 如果对于.obj文件和.llb文件使用了LoadExternalModule语句,...

LabWindows\/CVILabWindows\/CVI 简介
在交互式开发环境中编写的程序需遵循标准C规范。使用LabWindows\/CVI可以完成多项任务,包括交互式编程、功能强大的函数库创建数据采集和仪器控制应用、利用完备的软件工具进行数据采集、分析和显示、开发IVI仪器驱动程序和创建ActiveX服务器、开发C目标模块、动态链接库(DLL)、C语言库。在开发环境中,用户可以...

labwindows\/cvi 怎么打包做成可执行文件
可以。不知你用的CVI哪个版本?举个例子,细节可能因版本有所差别。在工程窗口中,选择【Build】\/【Creat Distribution Kit】,弹出生成软件包对话框。设置安装程序的默认目录、生成的安装程序所在的目录、设置安装程序是否安装Run-Time Engine(这个通常一定要安装)等等。再把程序所需所有文件添加进去。

相似回答