在Labwindows/CVI或c语言中如何调用别人写好的dll文件
如何在CVI中使用dll文件,只有dll,没有lib和h文件,请详细回答,万分感谢,这是我写的调用程序,//声明HINSTANCED12dll=NULL;//开始准备导入...
如何在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 展开
//声明
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、编写程序时,包含(#include "什么.h") dll文件作者提供 的 头文件(.h文件) 。
程序里,便和普通函数调用一样,去调用它的函数。
2、程序编译时,链接 dll文件作者提供 的 (.lib文件) 库文件。当然,可以在源程序里把.lib 名字 写上,编译时自动去链接,例子:#pragma comment (lib, "什么.lib")
3、执行时,要有 .dll 文件. 放在当前文件夹或系统文件夹里。
程序里,便和普通函数调用一样,去调用它的函数。
2、程序编译时,链接 dll文件作者提供 的 (.lib文件) 库文件。当然,可以在源程序里把.lib 名字 写上,编译时自动去链接,例子:#pragma comment (lib, "什么.lib")
3、执行时,要有 .dll 文件. 放在当前文件夹或系统文件夹里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询