阅读:1516回复:6
问个DLL的调用的问题
大侠们好,我有一块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时,说应用程序初始化错误:( |
|
最新喜欢:harton...
|
沙发#
发布于:2004-10-18 20:02
把整个工程贴上来看看,其实IO的例子,网上开原的例子很多,不一定要用别人的东西.
|
|
|
板凳#
发布于:2004-10-18 22:27
是不是你没有把dll拷贝到当前目录或者path指定的目录,
导致程序找不到相应的dll而出错? |
|
|
地板#
发布于:2004-10-19 08:43
那个DLL和sys我已经拷贝到了任何可能的地方:system32,还有vc的当前目录,还有vc的debug里面,但是不好用啊
to 老wo---我那个驱动程序和dll没有源代码,这是我的那个板卡自带的驱动程序,现在我就是不知道如何调用dll,调用这个dll时,还用::loadlibrary()嘛? 实在不行,我就编一个驱动了:( [编辑 - 10/19/04 by chencheng] |
|
|
地下室#
发布于:2004-10-19 16:33
你用dump的工具看看你要调用的函数是不是在那个lib或者dll里export的
|
|
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 ); 不知道能不能解决你的问题 ;) |
|
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] |
|