紧急求救:dll和它的调用者之间通信 如何实现?

leonatcs 2003-08-05 03:18:23
各位老大,

我用bcb编一个lockpc.dll文件,旨在显示一个要求用户输密码的对话框,
再编delphi程序来调用它,(不要骂我有病,我也是无奈),
可是调用者程序需要知道用户在被调用的对话框里输的密码是什么,
怎样实现这两者之间的通信呢?

请具体地说说如何编,先在这儿谢过了。
...全文
42 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonatcs 2003-08-05
  • 打赏
  • 举报
回复
我的50分啊!!!


呵呵。
leonatcs 2003-08-05
  • 打赏
  • 举报
回复
呵呵,我也到下班时间了,可是这问题搞不定,吃完饭又回来继续加班了。

//你在LockForm里面验证密码啊!

LockForm是bcb编写的lockpc.dll文件中的窗体,含有一个钩子,用来勾住alt+tab, alt+esc, crtl+esc, lwin和rwin。验证密码需要访问数据库,那边都是delphi编的,
而且已经编好了,在LockForm里验证是不可能了。

//如果你不想在LockForm里面验证密码,你可以在外面的调用程序处检查。

老大,我知道你的意思,
是调用者程序不断地询问被调用者,
这个方法我已开始就想到,但是我希望可以像“外设和主机通信”中的“中断”一样
有情况时被调用者发出中断请求,而不是像“程序查询”一样让调用者程序不断询问。







最后我避开了这个问题,不使用lockform,只把实现锁组合键功能的钩子留在dll里,
由调用者自己决定何时用它锁住组合键,何时放开。

谢谢你为我回答那么多!
netsys2 2003-08-05
  • 打赏
  • 举报
回复
下班了!
netsys2 2003-08-05
  • 打赏
  • 举报
回复
你在LockForm里面验证密码啊!

用户输入完成后敲回车,你就检查密码。


如果你不想在LockForm里面验证密码,你可以在外面的调用程序处检查。

如果不对再来一次!

//调用者
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char pass[80];

bool ret;
for(;;)
{
ret = getPass(pass);
if( ret == false )//用户取消输入
break;
if(!strcmp(pass,"1233"))//正确
break;
}

leonatcs 2003-08-05
  • 打赏
  • 举报
回复
如果这样:
bool getPass(char *pass)
{
LockForm->ShowModal();
strcpy(pass,Edit1->Text.c_str());
return true;
//or return false;
}
我的程序是需要验证用户输入的密码,正确才关闭LockForm,如果执行到了 strcpy(pass,Edit1->Text.c_str()); 说明LockForm已经关闭了,可是我还没有验证密码呢。
netsys2 2003-08-05
  • 打赏
  • 举报
回复
//这里是不是应该sleep()一下?

不能!

用ShowModal()

TMyInputBox* a = new TMyInputBox(Application);
try{
a->ShowModal();
}
catch(...){
delete a;
throw;
}
delete a;
leonatcs 2003-08-05
  • 打赏
  • 举报
回复
//------------------------------
bcb的指针和delphi的指针能匹配吗?

sure!


只有VB不匹配!
//------------------------------

呵呵,说的也是。

我想,
bool getPass(char *pass)
{
LockForm->Show();

//这里是不是应该sleep()一下?直到用户按“确定”,被唤醒再继续,可是这只有在学校学操作系统时讲过,太难,不会实际使用。

strcpy(pass,Edit1->Text.c_str());
return true;
//or return false;
}

leonatcs 2003-08-05
  • 打赏
  • 举报
回复
bool getPass(char *pass)
{
LockForm->Show();
//用户输入PASS
strcpy(pass,Edit1->Text.c_str());
return true;
//or return false;
}
用户还没输入时,就接着执行strcpy(pass,Edit1->Text.c_str());了呀。
netsys2 2003-08-05
  • 打赏
  • 举报
回复
bcb的指针和delphi的指针能匹配吗?

sure!


只有VB不匹配!
leonatcs 2003-08-05
  • 打赏
  • 举报
回复
还有,如你所说得xx(char*pass),
bcb的指针和delphi的指针能匹配吗?
netsys2 2003-08-05
  • 打赏
  • 举报
回复
你的DLL里弄一个标准出口函数嘛,调用完不就自动返回了!

// DLL
bool getPass(char *pass)
{
//打开一个对话框
//用户输入PASS
strcpy(pass,Edit1->Text.c_str());
return true;
//or return false;
}
//---------------------------------------------------------------------------
//掉用者
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char pass[80];
bool ret = getPass(pass);
....
}
leonatcs 2003-08-05
  • 打赏
  • 举报
回复
可是当用户输入完毕按回车后,需要及时通知调用者程序“我有参数传递给你”,
这如何做到呢?
netsys2 2003-08-05
  • 打赏
  • 举报
回复
用参数传递吧!

你的函数中增加一个参数

xx(char *pass);

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧