关于dll中函数的问题

gengjia8512 2008-07-07 03:51:09
我自己写了一个dll文件,然后编译生成了一个dll和一个lib文件,但是用软件看dll里面却没有的我定义的函数(软件是好的看其他dll文件都有自定义函数,但都不是在我电脑上生成的)为什么?。
...全文
58 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengjia8512 2008-07-08
  • 打赏
  • 举报
回复
这个问题已经解决了。又出现了另外一个问题。
上面的DLL需要调用第三方DLL,在调用GetProcAddress后能找到函数地址,但一执行就跳出一个错误对话框,是不是在嵌套调用DLL时候要注意其他什么问题?
jxw1987628 2008-07-08
  • 打赏
  • 举报
回复
那个错误对话框是什么,上面提示什么信息?

我觉得要注意dll加载的顺序
loveshell 2008-07-07
  • 打赏
  • 举报
回复
头文件没有导出函数?
gengjia8512 2008-07-07
  • 打赏
  • 举报
回复
全部dll文件如下,就是5个函数,但Dll生成后没有这几个函数。
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include "CH375DLL.H"
#pragma hdrstop

#pragma argsused
HINSTANCE ins;
typedef void (* FUNC_close)(ULONG); //指向关闭设备函数
typedef HANDLE (* FUNC_open)(ULONG); //指向打开设备函数
typedef BOOL (*FUNC_read)(ULONG,PVOID,PULONG); //指向读数据函数
typedef BOOL (*FUNC_write)(ULONG,PVOID,PULONG); //指向读数据函数
typedef BOOL (*FUNC_reset)(ULONG); //指向读数据函数
FARPROC proc_close,proc_open,proc_read,proc_write,proc_reset;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if((ins=LoadLibrary( "CH375DLL.DLL" ))==NULL)
return 0;
else
return 1;
}
//---------------------------------------------------------------------------
/*打开USB设备*/
HANDLE _stdcall OpenUSBDevice()
{

/*取函数地址*/
proc_close=GetProcAddress(ins,"_CH375CloseDevice");
proc_open= GetProcAddress(ins,"_CH375OpenDevice");
proc_read= GetProcAddress(ins,"_CH375ReadData");
proc_write=GetProcAddress(ins,"_CH375WriteData");
FUNC_close CloseUsb=(FUNC_close)proc_close;
FUNC_open Open_Usb=(FUNC_open)proc_open;
CloseUsb(0);
//CH375CloseDevice(0); //关闭CH375设备
return Open_Usb(0);//CH375OpenDevice(0); //打开CH375设备,返回句柄,出错则无效,0对应第一个设备
}
/*关闭USB设备*/
void _stdcall CloseUSBDevice()
{
FUNC_close CloseUsb=(FUNC_close)proc_close;
CloseUsb(0);
//CH375CloseDevice(0); //关闭CH375设备
}
/*从下位机读取数据*/
int _stdcall ReadUSBDevice(unsigned char *Buff,unsigned long length)
{
FUNC_close CloseUsb=(FUNC_close)proc_close;
FUNC_open Open_Usb=(FUNC_open)proc_open;
CloseUsb(0);
//CH375CloseDevice(0); //关闭CH375设备
if(Open_Usb(0)==INVALID_HANDLE_VALUE) //打开CH375设备,出错则无效
{
return 0;
}
else
{
//unsigned long length=100;
FUNC_read Read_usb=(FUNC_read)proc_read;
Read_usb(0,Buff,&length);
//CH375ReadData(0,Buff,&length);
return length;
}

}
/*上位机向下位机传送数据*/
int _stdcall WriteUSBDevice(unsigned char *Buff,unsigned long length)
{
unsigned long len;
len=length; //保存用户要写入的数据长度
FUNC_close CloseUsb=(FUNC_close)proc_close;
FUNC_open Open_Usb=(FUNC_open)proc_open;
FUNC_write Write_usb=(FUNC_write)proc_write;
CloseUsb(0);
//CH375CloseDevice(0); //关闭CH375设备
if(Open_Usb(0)==INVALID_HANDLE_VALUE) //打开CH375设备,出错则无效
{
return 0;
}
else
{
Write_usb(0,Buff,&length);
//CH375WriteData(0,Buff,&length);
if(len!=length) //如果已经写入的长度与用户需要写入的长度不符则返回0
return 0;
else
return length; //否则返回实际长度
}
}
/*复位USB设备*/
void _stdcall ResetUSBDevice()
{
proc_reset=GetProcAddress(ins,"_CH375ResetDevice");
FUNC_reset Reset_usb=(FUNC_reset)proc_reset;
Reset_usb(0);
//CH375ResetDevice(0);
}

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧