未了结的DLL问题!
有一ad.dll中有一接口库OneWayInterface,其当中有一函数:function ModifyPsw(const OldPassword: WideString; const NewPassword: WideString):integer;
在调用了接口connectopen 后调用。
参数:OldPassword 旧密码
NewPassword 新密码
返回:>0 帐户密码修改成功
-1 帐户密码修改失败。
请问各位大侠如何调用,谢谢!急呀!
我在网上找了好多资料,都是那几篇,真没意思。
希望各位高手指点!
问题点数:0、回复次数:17Top
1 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-02 20:30:44 得分 0
先声明函数:int ModifyPsw(const WideString OldPassword, const WideString NewPassword);
然后就可以调用ModifyPsw函数了
链接之前,先运行“tlib ad.dll ad.lib”命令,将生成“ad.lib”文件,然后将该文件加入工程中,就可以编译成功了。Top
2 楼lysh137856(黎宏宇)回复于 2004-12-02 21:25:55 得分 0
如果是动态调用,应怎么样呢?
Top
3 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-02 21:33:03 得分 0
typedef int (*TModifyPsw)(const WideString OldPassword, const WideString NewPassword);
HINSTANCE hnd = LoadLibrary("ad.dll");
if(hnd == NULL)return -1;
TModifyPsw *ModifyPsw = (TModifyPsw *)GetProcAddress(hnd, "ModifyPsw");
if(ModifyPsw == NULL)return -1;
然后就可以调用了
ModifyPsw(...);Top
4 楼pig_liang(朱)回复于 2004-12-02 21:51:40 得分 0
非常详细,谢谢Top
5 楼lysh137856(黎宏宇)回复于 2004-12-03 11:33:54 得分 0
不对呀!
代码如下:
int i;
HINSTANCE ins=LoadLibrary("MwNetGate.dll");
if(ins==NULL)
{
throw "Can't load library!";
}
else
{
TModifyPsw *ModifyPsw = (TModifyPsw *)GetProcAddress(hnd, "ModifyPsw");
if(ModifyPsw==NULL)
{
Application->MessageBoxA("没有此函数存在!","失败","失败");
}
else
{
i=ModifyPsw("13178930258","123456");
if(i==0)
Application->MessageBoxA("成功!","成功","恭喜");
else
Application->MessageBoxA(" 失败!","失败","失败");
}
}
且我在.H中已声明:typedef int (*TModifyPsw)(const WideString OldPassword, const WideString NewPassword);
但运行起来提示出错:[C++ Error] User_sendmsg.cpp(83): E2034 Cannot convert 'char *' to 'int'
请各位指点!谢谢!
Top
6 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-03 14:49:45 得分 0
TModifyPsw ModifyPsw = (TModifyPsw *)GetProcAddress(hnd, "ModifyPsw");
不好意思多了一个“*”Top
7 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-03 14:51:35 得分 0
TModifyPsw ModifyPsw = (TModifyPsw)GetProcAddress(hnd, "ModifyPsw");Top
8 楼lysh137856(黎宏宇)回复于 2004-12-03 15:14:04 得分 0
先谢谢楼上的大侠的热心帮助.
还是一样的错误呀!希望多指点!急呀!Top
9 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-03 15:48:41 得分 0
哇噻,你出的错误是Application->MessageBoxA调用错了,怎么在那里干着急?出错了总得看看错在哪个位置吧?!Top
10 楼lysh137856(黎宏宇)回复于 2004-12-03 15:51:03 得分 0
哦,是我搞错了,Application->MessageBoxA("没有此函数存在!","失败","失败");
应为:Application->MessageBoxA("没有此函数存在!","失败",MB_OK);
Application->MessageBoxA("成功!","成功",MB_OK);
Application->MessageBoxA(" 失败!","失败",MB_OK);
但运行起来却一直执行Application->MessageBoxA("没有此函数存在!","失败",MB_OK);
但该函数在DLL中应该没问题的呀!请各位指点
Top
11 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-03 15:53:54 得分 0
typedef int (*TModifyPsw)(const WideString OldPassword, const WideString NewPassword);
int i;
HINSTANCE ins=LoadLibrary("MwNetGate.dll");
if(ins==NULL)
{
throw "Can't load library!";
}
else
{
TModifyPsw ModifyPsw = (TModifyPsw)GetProcAddress(ins, "ModifyPsw");
if(ModifyPsw==NULL)
{
Application->MessageBoxA("没有此函数存在!","失败",MB_OK);
}
else
{
i=ModifyPsw("13178930258","123456");
if(i==0)
Application->MessageBoxA("成功!","成功",MB_OK);
else
Application->MessageBoxA(" 失败!","失败",MB_OK);
}
}
Top
12 楼lysh137856(黎宏宇)回复于 2004-12-03 16:05:26 得分 0
运行起来却一直执行Application->MessageBoxA("没有此函数存在!","失败",MB_OK);
但该函数在DLL中应该没问题的呀!请指点
Top
13 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-03 16:07:57 得分 0
可能名字是_ModifyPsw,用一个查看器看一下MwNetGate.dll文件,都有什么函数Top
14 楼lysh137856(黎宏宇)回复于 2004-12-03 16:12:47 得分 0
MwNetGate.dll中有一接口库OneWayInterface,其当中有一函数:function ModifyPswTop
15 楼xpdavis(咕嘟-不想孤独)回复于 2004-12-03 16:29:23 得分 0
是类的方法吧?导出类是不能动态调用的,你还是用静态编译的办法吧Top
16 楼lysh137856(黎宏宇)回复于 2004-12-03 16:39:57 得分 0
MwNetGate.DLL 的说明:
One-way interface 单向网关接口库
含有1个接口:
密码修改。
使用regsvr32.exe命令进行注册,progid:MwNetGate.OneWayInterface
密码修改
function ModifyPsw(const OldPassword: WideString; const NewPassword: WideString):integer;
参数:OldPassword 旧密码
NewPassword 新密码
返回:>0 帐户密码修改成功
-1 帐户密码修改失败。
我用TDUMP查看该DLL时,显示如下:
EXPORT ord:0003='DllCanUnloadNow'
EXPORT ord:0004='DllGetClassObject'
EXPORT ord:0002='DllRegisterServer'
EXPORT ord:0001='DllUnregisterServer'
不好意思小弟 之前没用过DLL
还请耐心指点,谢谢!
Top
17 楼lysh137856(黎宏宇)回复于 2004-12-03 22:30:48 得分 0
急呀!Top




