这样可以使TClientSocket提示 "无效的授权说明"。源代码如下(300分)

  • 主题发起人 主题发起人 skyjacker
  • 开始时间 开始时间
S

skyjacker

Unregistered / Unconfirmed
GUEST, unregistred user!
程序环境:
WindowsXp Sp2,D6, 使用TClientSocket,窗体上也有adoConnection
程序大体流程:
在Form的Create中 MyClientSocket.active;之后 Adoconnected.

问题代码如下:
procedure TMyMain.MyClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
var x:Integer;
begin
g_Linked := true; //全局变量 g_Linked
x:=10;
ShowMessage(IntToStr(x));
end;
说明:
Connect中如果有全局变量 g_Linked,则肯定会弹出 "无效的授权说明"。
没有 g_Linked则不会弹出。

运行中显示cpu窗口:

0048BE49 FF8B437833D2 dec dword ptr [ebx-$2dcc87bd]
//注:向上拖动显示cpu窗口滚动条后,此行会变。为什么?
//[ebx-$2dcc87bd] 这个值有点怪吧?
0048BE4F E85892F7FF call @WStrCmp
0048BE54 7412 jz +$12
0048BE56 8B4378 mov eax,[ebx+$78]
0048BE59 50 push eax
0048BE5A 8B436C mov eax,[ebx+$6c]
0048BE5D 50 push eax
0048BE5E 8B00 mov eax,[eax]
0048BE60 FF505C call dword ptr [eax+$5c]
0048BE63 E8E4A9F7FF call @CheckAutoResult
0048BE68 33C0 xor eax,eax
0048BE6A 5A pop edx
0048BE6B 59 pop ecx
0048BE6C 59 pop ecx
0048BE6D 648910 mov fs:[eax],edx
0048BE70 6885BE4800 push $0048be85
0048BE75 8D45FC lea eax,[ebp-$04]
0048BE78 E8DF8FF7FF call @WStrClr
0048BE7D C3 ret
0048BE7E E97181F7FF jmp @HandleFinally
0048BE83 EBF0 jmp -$10
0048BE85 5B pop ebx
0048BE86 59 pop ecx
0048BE87 5D pop ebp
0048BE88 C3 ret
0048BE89 8D4000 lea eax,[eax+$00]
0048BE8C 53 push ebx
0048BE8D 8BD8 mov ebx,eax
0048BE8F 837B6C00 cmp dword ptr [ebx+$6c],$00
0048BE93 7422 jz +$22


继续说明
0048BE49 FF8B437833D2 dec dword ptr [ebx-$2dcc87bd]
//注:向上拖动显示cpu窗口滚动条后,此行会变。
再往上拖动,发现这些代码属于TAdoConnection.DoConnect的。
与TAdoConnection没什么关系吧?

可能本质上还是TAdoConnection的问题,只是巧合还是两个互相影响的问题?
 
delphi5开发人员指南里有这个方面的问题
你自己找一下吧
 
小声的说一句。是不是初始化的问题?
 
To:sundata 暂时没有这本书啊。 可否大体讲一下为什么?

To:网中戏. 有可能是初始化的问题。

有两个差不多的程序A和B。 A没有问题。 B有这个问题。

把ADO建立连接那块给注释了,留着SOCKET那块,还有这问题。
注释socket,留着ado,没有这个问题。

直接运行可执行,有时候弹有时候不弹。没有规律。
 
呵呵,楼主一向大手笔
继续说明
0048BE49 FF8B437833D2 dec dword ptr [ebx-$2dcc87bd]
//注:向上拖动显示cpu窗口滚动条后,此行会变。
再往上拖动,发现这些代码属于TAdoConnection.DoConnect的。
与TAdoConnection没什么关系吧?

// DoConnect怎么会与TAdoConnection没关系呢?看看源码,呵呵
// TAdoConnection所有的Connect动作,例如Active之类都是通过DoConnect来实现的
// 再说你的无效授权问题,仅是猜测,俺没发现D5上有这种说明
// 出现这种情况,一般是客户端连接服务端,由于连接字符串,或者其他原因导致
// 客户端的权限不能够访问服务器,估计你的TClientSocket或者TADOConnect的连接
// 连接冲突导致权限上的判断失误,如果你的TClientSocket和Sql的客户端是同一个
// 而服务器端也是同一个的话
 
我的TClientSocket和Sql的客户端是同一个,服务器端也是同一个。

而且另外一个程序A ,也是按照这个方式与主程序建立连接了。A 没有弹出“无效..”提示。

在一台计算机上。
 
网中戏 与 uiit 说得对。

蹦到TAdoConnection.DoConnect是由于一个定时器在运行。

十分感谢!
 
后退
顶部