chencheng
驱动小牛
驱动小牛
  • 注册日期2003-06-27
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1516回复:6

问个DLL的调用的问题

楼主#
更多 发布于:2004-10-18 17:09
大侠们好,我有一块ISA卡,驱动程序qq.sys是自带的,同时还带了一个qq.DLL文件,一个qq.h文件和一个qq.lib文件,我不知道具体怎么在VC应用程序中调用这个qq.sys,请大侠指教,
我是这么做的:

将那个qq.lib文件加到project->setting->link->object/library modules 里面,
然后,把qq.h文件加到vc的工作空间。
这个是qq.h文件:
///////////////////////////////////////////////////
#ifndef _PS2308_INCLUDED
#define _PS2308_INCLUDED

extern "C"
{
__declspec(dllimport)
BYTE __stdcall PortIn(BYTE PortOffset);

__declspec(dllimport)
void __stdcall PortOut(BYTE PortOffset, BYTE Value);
}

#endif
/////////////////////////////////////////////////
最后,在vc的那个xxDlg.cpp中include "qq.h"

就直接调用那个PortIn()函数和PortOut()了,编译没错,但是运行VC时,说应用程序初始化错误:(

最新喜欢:

hartonoharton...
好好学习,天天向上
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-10-18 20:02
把整个工程贴上来看看,其实IO的例子,网上开原的例子很多,不一定要用别人的东西.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-18 22:27
是不是你没有把dll拷贝到当前目录或者path指定的目录,
导致程序找不到相应的dll而出错?
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
chencheng
驱动小牛
驱动小牛
  • 注册日期2003-06-27
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-19 08:43
那个DLL和sys我已经拷贝到了任何可能的地方:system32,还有vc的当前目录,还有vc的debug里面,但是不好用啊

to 老wo---我那个驱动程序和dll没有源代码,这是我的那个板卡自带的驱动程序,现在我就是不知道如何调用dll,调用这个dll时,还用::loadlibrary()嘛?
实在不行,我就编一个驱动了:(

[编辑 -  10/19/04 by  chencheng]
好好学习,天天向上
chufuxuan
驱动牛犊
驱动牛犊
  • 注册日期2003-01-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-19 16:33
你用dump的工具看看你要调用的函数是不是在那个lib或者dll里export的
xx_focus
驱动中牛
驱动中牛
  • 注册日期2003-08-06
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望10点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-19 16:37
可以试试动态装载,不用加入 qq.h 和 qq.lib

只要把 qq.dll 复制到你的应用程序目录(编译后生成exe文件)

//加载库(可以在程序启动时,也可以在任何地方)
HINSTANCE hqqLib = LoadLibrary( "qq.dll" );
//如果库加载失败就返回
if (!hqqLib)
{
^^^^AfxMessageBox("Error:Load qq library");
^^^^return;
}
//定义函数指针类型(也可以在头文件中,它只是一个类型)
typedef BYTE (_stdcall *PORTIN)(BYTE PortOffset);

//获得函数地址(每次使用这个函数都要重新获取)
PORTIN portin = (PORTIN)GetProcAddress(hqqLib, "PortIn");

//如果函数地址获取成功就使用这个函数
if (NULL != portin)
{
^^^^data = portin(portoffset);
^^^^portin = NULL;
}//end if

//释放库(必需同 LoadLibrary 配对!!)
FreeLibrary( hqqLib );

不知道能不能解决你的问题 ;)
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2004-10-30 18:48
简单的逆向:
lordpe 查看dll的输出表的函数;记好函数的ASII;
push xxxx===》qq.d
call lLoadLibrary
cmp eax,0
jnz xxx ;==eax不等于0说明成功,反之失败;
失败;
xxxx :push yyy==》某个函数的字符
       push eax
       call GetProcAddress
看看GetProcAddress的返回直,为0失败,否之是函数的调用地址;
要分要分,要加分的??????????????



[编辑 -  10/30/04 by  qiweixue]
游客

返回顶部