社区
Windows SDK/API
帖子详情
关于dll中函数的问题
gengjia8512
2008-07-07 03:51:09
我自己写了一个dll文件,然后编译生成了一个dll和一个lib文件,但是用软件看dll里面却没有的我定义的函数(软件是好的看其他dll文件都有自定义函数,但都不是在我电脑上生成的)为什么?。
...全文
95
4
打赏
收藏
关于dll中函数的问题
我自己写了一个dll文件,然后编译生成了一个dll和一个lib文件,但是用软件看dll里面却没有的我定义的函数(软件是好的看其他dll文件都有自定义函数,但都不是在我电脑上生成的)为什么?。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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);
}
DLL
中
函数
返回CString的
问题
当一个MFC Regular
DLL
中
的
函数
返回或接受CString类型参数时,如果
DLL
和应用程序的MFC运行时库链接方式不一致,可能会导致_CrtIsValidHeapPointer异常。这是因为
DLL
和应用程序可能拥有独立的内存堆。解决方法包括确保
DLL
和应用程序的编译模式(Debug/Release)、运行时库链接方式(Static/Shared Multi-Threaded
DLL
)相同。尽管如此,调试版本下只有特定配置才能正常工作,且CWnd::GetWindowText(CString &)
函数
未遇到此
问题
。
dumpbin查看
dll
中
函数
名字的
问题
使用dumpbin查看
DLL
函数
名时遇到mspdb100.
dll
缺失
问题
,通过复制mspdb100.
dll
和mspdbsrv.exe到相应目录解决。C++
中
,默认的_cdecl和_stdcall调用约定会影响
函数
的导出名称。extern C可以避免C++名称修饰,保持
函数
原名。
使用JNA调用
DLL
函数
遇到的
问题
本文记录了在Java项目
中
使用JNA调用
DLL
函数
时遇到的
问题
及解决过程。通过
DLL
函数
查看器获取
函数
信息,发现参数可能需要转化为Pointer类型。在尝试使用Pointer和Memory类进行转换时,遇到Invalid Memory Access错误。经过分析,发现直接使用Pointer的peer(内存地址)会导致非法内存访问。最终,通过getLong方法获取虚拟地址并修正代码,成功解决了
问题
。
python调用
dll
函数
_关于从加载的
DLL
调用
函数
的Python基本
问题
本文档描述了作者在使用Python 3.3.3通过ctypes库调用
DLL
函数
时遇到的
问题
。作者成功加载了
DLL
,但尝试调用需要参数的
函数
时遇到困难。具体
问题
是尝试调用`JTAG_Get
Dll
Version`和`JTAG_GetNumDevices`
函数
时,遇到了参数传递错误。在尝试多种方法后,作者仍未能解决
问题
,寻求帮助以理解正确的参数传递方式。
c++同名
dll
和
dll
中
同名
函数
加载
问题
本文探讨了如何在单进程
中
处理同名
DLL
加载
问题
,介绍了动态加载与隐式加载的区别,提供了解决独立和非独立同名
DLL
冲突的策略,以及针对
函数
相同但名称不同的
DLL
的处理方法。重点讨论了动态链接库
中
的命名冲突解决方案和常见库版本策略的应用。
Windows SDK/API
1,222
社区成员
8,135
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章