function ZBConnect(PBuff:PChar):Word;
var
szPassValue: String;
szAccountID,
szAccountName,
szUserName: String;
szDBName: String;
iCount,iNum: Integer;
begin
Result := 0;
BConnected := False; DataModuleZB := TDataModuleZB.Create(Application);
Application.CreateForm(TFormLogin,FormLogin);
try if Formlogin.ShowModal <> idOK then
begin BConnected := False;
Result:=0;
end else
begin
szAccountID := Trim(FormLogin.ComboBoxZT.Text);
szAccountName := Trim(FormLogin.ComboBoxZT.Text);
szUserName := Trim(FormLogin.ComboBoxCZY.Text);
szDBName := Trim(FormLogin.ComboBoxDBName.Text);
with DataModuleZB.SocketConnectionZB do
begin
Connected := False;
Connected := True;
if AppServer.NewLogin('',szDBName,'','') then
begin
szPassValue := szAccountID + ' '+ szAccountName + ' '+ szUserName;
StrCopy(PBuff,PChar(szPassValue));
BConnected := True;
Result:=1;
end else
begin
MessageDLG('无法与数据库服务器建立连接,请使用安易后台数据管理工具进行自动配置。',mtError, [mbOK],0);
DataModuleZB.SocketConnectionZB.Connected := False;
end;
end;
end;
finally
Formlogin.Free;
end
var
szPassValue: String;
szAccountID,
szAccountName,
szUserName: String;
szDBName: String;
iCount,iNum: Integer;
begin
Result := 0;
BConnected := False; DataModuleZB := TDataModuleZB.Create(Application);
Application.CreateForm(TFormLogin,FormLogin);
try if Formlogin.ShowModal <> idOK then
begin BConnected := False;
Result:=0;
end else
begin
szAccountID := Trim(FormLogin.ComboBoxZT.Text);
szAccountName := Trim(FormLogin.ComboBoxZT.Text);
szUserName := Trim(FormLogin.ComboBoxCZY.Text);
szDBName := Trim(FormLogin.ComboBoxDBName.Text);
with DataModuleZB.SocketConnectionZB do
begin
Connected := False;
Connected := True;
if AppServer.NewLogin('',szDBName,'','') then
begin
szPassValue := szAccountID + ' '+ szAccountName + ' '+ szUserName;
StrCopy(PBuff,PChar(szPassValue));
BConnected := True;
Result:=1;
end else
begin
MessageDLG('无法与数据库服务器建立连接,请使用安易后台数据管理工具进行自动配置。',mtError, [mbOK],0);
DataModuleZB.SocketConnectionZB.Connected := False;
end;
end;
end;
finally
Formlogin.Free;
end
procedure TFormDebug.Button1Click(Sender: TObject);
var
Connect: TZBConnect;
szTemp: PChar;
iRet:Integer;
begin AHandle := LoadLibrary('DDZB.Dll'); try
if AHandle = 0 then
begin
MessageDLG('不能装载动态连接库!',mtError,[mbOK],0);
Exit;
end;
Connect := GetProcAddress(AHandle,'ZBConnect');
if not (@Connect = nil) then
begin
szTemp := StrAlloc(256*SizeOf(Char));
try
iRet := Connect(szTemp);
//dd := Connect;
//ShowMessage(String(szTemp));
if iRet = 1 then
bconnect := True
else
bConnect := False;
finally
StrDispose(szTemp);
end;
end
else
raiseLastwin32Error;
finally
FreeLibrary(AHandle);//注释此句,关闭登陆对话框无错,但在关闭调用程序时出错
//是有关内存方面的错
end;
end;
Application.CreateForm(TFormLogin,FormLogin);
你把这句改成
TFormLogin.Create 这样来创建试试.
不知对DLL的调用和释放还有没有其他方法
哦...感觉有可能问题,好象跟那个数据模块有点关系.或者同那个Socket连接...
是在登录成功后才释放DLL的才出错,如果调用DLL其他与数据模块无关的FORM不会出错,而且把Login中与数据模块相关的代码注释掉后也不会出错,所以你的说法我比较赞同。但是登录成功后我不能关闭连接,因为我后面还要用到这个连接查询。所以请你以及其他朋友一起再帮我找找原因。再次感谢你的答复!希望有更多的朋友参加,我还会继续加分的!
1。要不然你就等到你的变量可以关闭的时候再释放动态连接库,
2。要不然你就想办法不要在动态连接库中创建这个变量,而是在调用程序中创建,当作参数传入,这个时候可以释放动态连接库。
3。要不然你就采用什么方法将这个变量保存或者备份一份,然后在关闭变量,释放动态连接库。
4。要不然你就不要采用动态连接库,不就是个登录窗口嘛,不是非要采用动态连接库才能做啊?!供参考。