yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1793回复:8

vtoolsd开发的vxd中可以使用不同文件里的类里的函数吗?

楼主#
更多 发布于:2003-01-22 13:12
vtoolsd开发的vxd中可以使用不同文件里的类里的函数吗?
比如:a.cpp里有CAClass::AFunc()
b.cpp里有CBClass::BFunc()
那么在AFunc()中可以引用BFunc()吗?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-22 15:43
当然可以,VTOOLSD的C++和普通的C++是一样的
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-22 18:10
#define DEVICE_MAIN
#include \"fmsystem.h\"
#undef DEVICE_MAIN

#include \"IOControl.h\"

DWORD FmsystemDevice::OnW32DeviceIoControl(PIOCTLPARAMS p)
{
DWORD nReVal=0;
CIOControl ioCtl;
switch(p->dioc_IOCtlCode)
{
case DEVICEIO_MODE_MONITON:
if(!ioCtl.HookControl_MonitON(p))
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这个地方出错了(编译出错)
nReVal= 1;
break;
}
return nReVal;
}

这段代码是程序的一部分,为什么不能引用CIOControl类里的HookControl_MonitON()??
谢谢,在帮以下吧
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-23 09:42
要看你的类声明才知道。出错信息是什么?
还有,CIOControl ioCtl;声明成局部变量?这种做法很少哦
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-23 14:40
错误信息如下:
fmsystem.OBJ : error LNK2001: unresolved external symbol \"public: int __thiscall CIOControl::HookControl_MonitON(struct tagIOCTLParams *)\" (?HookControl_MonitON@CIOControl@@QAEHPAUtagIOCTLParams@@@Z)

函数声明也很简单
IOControl.h里
class CIOControl  
{
public:
BOOL HookControl_MonitON(PIOCTLPARAMS p);
};
跟函数体没关系,就不写了.

后来我把函数体(.cpp)引入后就可以编译了.
不过这样要头文件有何用?


还有个问题顺便问一下
typedef struct tagFMS_USEINFO {
DWORD Index;
unsigned char FolderPath_Long[256];
} FMS_USEINFO, * LPFMS_USEINFO;
LPFMS_USEINFO FMS_UseInfo[10];
for (int i = 0; i < 10; i++) {
  FMS_UseInfo = HeapAllocate(sizeof(FMS_USEINFO), HEAPZEROINIT);
}

.\\fmsystem.cpp(30) : error C2440: \'=\' : cannot convert from \'void *\' to \'struct tagFMS_USEINFO *\'

再次表示感谢
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-23 15:06
上面的类型错误问题解决了
FMS_UseInfo = (LPFMS_USEINFO)HeapAllocate(sizeof(FMS_USEINFO), HEAPZEROINIT);
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-23 15:44
后来我把函数体(.cpp)引入后就可以编译了.
不过这样要头文件有何用?

>>> 头文件只是声明,只在编译时使用,连接时如果找不到某个OBJ或者LIB中有类型同样的符号,就是出现开始那个错误。

LPFMS_USEINFO FMS_UseInfo[10];
for (int i = 0; i < 10; i++) {
FMS_UseInfo = HeapAllocate(sizeof(FMS_USEINFO), HEAPZEROINIT);
}

>>> 你改成FMS_UseInfo = (LPFMS_USEINFO)HeapAllocate(sizeof(FMS_USEINFO), HEAPZEROINIT);
这段代码好象有点问题,正确应该这样写:

LPFMS_USEINFO FMS_UseInfo[10];
for (int i = 0; i < 10; i++) {
FMS_UseInfo = (LPFMS_USEINFO)HeapAllocate(sizeof(FMS_USEINFO), HEAPZEROINIT);
}

或者:

LPFMS_USEINFO FMS_UseInfo;
FMS_UseInfo = (LPFMS_USEINFO)HeapAllocate(sizeof(FMS_USEINFO) * 10, HEAPZEROINIT);

[编辑 -  1/23/03 by  Coolice]
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-23 15:50
咦~
FMS_UseInfo【i】的中括号怎么没显示出来?这么说你的代码是对的,只是显示不正确,哈哈~
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-23 21:43
>>LPFMS_USEINFO FMS_UseInfo;
>>FMS_UseInfo = (LPFMS_USEINFO)HeapAllocate(sizeof(FMS_USEINFO) * 10, HEAPZEROINIT);
这个好像有问题,不过没关系了

>>连接时如果找不到某个OBJ或者LIB中有类型同样的符号,就是出现开始那个错误。
谢谢你的提醒,我忘了修改mak文件了.




游客

返回顶部