Link to home
Start Free TrialLog in
Avatar of smile_tbw
smile_tbw

asked on

registry problem

May i know how to register the ocx and dll used for the POP and SMTP component from Delphi 3 and NetManage ActiveX.
Are they (the component, POP and SMTP) work in winsock 2? If yes, may I know how to register them as well. thank you.
Avatar of Matvey
Matvey

Doesn't resrv32 works?
Regsvr32.exe I mean...
ASKER CERTIFIED SOLUTION
Avatar of BoRiS
BoRiS

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of smile_tbw

ASKER

I used the install shield provided by delphi 3.0 instalation CD. It should automatically register all the DLL and OCX, right?
I have included NMSCKN.DLL, NMOCOD.DLL, NMORENU.DLL, POPCT.OCX, SMTPCT.OCX and WINSCK.OCX. Is this correct? I have checked from the help file that only these files are neccessary but I will appreciate your help to indicate that any files are missing.

Thank you
smile_tbw

The install shield will handle the ocx's and dll's, and as far as I can see all the files you have listed are the ones you need...

Later
BoRiS
yes....well but it don't work. Any suggestion?
for your information, it run well in the computer with delphi 3 that i used. BUT after Winsock 2 (from Microsoft) installed, it will through some exception and not working at all. It seems that the dll and ocx is not well compatible with winsock 2.
The error message popup is 'Unexpected Error' during the POP.Authenticate method. Any idea?
sorry, it is not POP.Authenticate, it is during the SendDoc() method.
smile_tbw

which meathod of senddoc are using http, ftp etc..

post the code snippet of the senddoc method and lets see...

Later
BoRiS
here we go.......

function NoParam: Variant;
begin
  TVarData(Result).VType := varError;
  TVarData(Result).VError := DISP_E_PARAMNOTFOUND;
end;

procedure TForm1.SendTimerTimer(Sender: TObject);
begin
  SendTimer.Interval := DisableTimer;
  if (SMTP2.State = prcConnected)and(SMTP2.ProtocolState = smtpTransaction) then
  begin
mSend1.Lines.Add('Protocol state in sendtimer = '+IntToStr(SMTP2.ProtocolState));
    try
      SMTP2.Quit;
    except
      SendTimer.Interval := EnableTimer;
    end
  end
  else
  if SMTP2.State = prcDisconnected then
    begin
      SMTPError := False;
      SendCycle := SendCycle + 1;
      Label28.Caption := 'Count = ' + IntToStr(SendCycle);
      mSend1.Lines.Add('Count = ' + IntToStr(SendCycle));
      SMTP2.Connect(NoParam, NoParam);
   end;
end;

procedure TForm1.SMTP2StateChanged(Sender: TObject; State: Smallint);
begin
  case State of
    prcConnecting:
      begin
        StatusBar7.SimpleText := 'Connecting to SMTP server: ' +
                                                         SMTP2.RemoteHost+'...';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    prcResolvingHost:
      begin
        StatusBar7.SimpleText := 'Resolving Host';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    prcHostResolved:
      begin
        StatusBar7.SimpleText := 'Host Resolved';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    prcConnected:
      begin
        StatusBar7.SimpleText := 'Connected to SMTP server: ' +SMTP2.RemoteHost;
        mSend1.Lines.Add(StatusBar7.SimpleText);
      end;
    prcDisconnecting:
      begin
        StatusBar7.SimpleText := 'Disconnecting from SMTP server: ' +
                                                         SMTP2.RemoteHost+'...';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    prcDisconnected:
      begin
        StatusBar7.SimpleText := 'Disconnected from SMTP server: ' +
                                                               SMTP2.RemoteHost;
        mSend1.Lines.Add(StatusBar7.SimpleText);
        if SendASAP.Checked then
          SendTimer.Interval := EnableTimer // enable Sending timer
        else
          SendTimer.Interval := (UDSendCycleMin.Position*60 +
                                                  UDSendCycleSec.Position)*1000;
        lEmailSentOn.Caption := 'Last Email Sent On ' +
                                                  DateTimeToStr(LatestSentStamp)
      end;
   end;
end;

procedure TForm1.SMTP2DocInput(Sender: TObject; const DocInput: DocInput);
begin
  case DocInput.State of
    icDocBegin:
      begin
        StatusBar7.SimpleText := 'Initiating document transfer';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    icDocHeaders:
      begin
        StatusBar7.SimpleText := 'Sending headers';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    icDocData:
      begin
        if DocInput.BytesTotal > 0 then
          StatusBar7.SimpleText := Format('Sending data: %d of %d bytes (%d%%)',
                  [Trunc(DocInput.BytesTransferred), Trunc(DocInput.BytesTotal),
                      Trunc(DocInput.BytesTransferred/DocInput.BytesTotal*100)])
        else
          StatusBar7.SimpleText := 'Sending...';
        mSend1.Lines.Add(StatusBar7.SimpleText)
      end;
    icDocEnd:
      begin
        if SMTPError then
          StatusBar7.SimpleText := 'Transfer aborted'
        else
          StatusBar7.SimpleText := Format('Mail sent to %s (%d bytes data)',
            [EmailA[CLogin, ElecAccountPos], Trunc(DocInput.BytesTransferred)]);
        mSend1.Lines.Add(StatusBar7.SimpleText);
        QuitSend.Interval := EnableTimer;
      end;
  end;
  StatusBar7.Update;
end;

procedure TForm1.SMTP2Error(Sender: TObject; Number: Smallint;
  var Description: WideString; Scode: Integer; const Source,
  HelpFile: WideString; HelpContext: Integer; var CancelDisplay: WordBool);
var
  ErrorStr: string;
begin
  SMTPError := True;
  CancelDisplay := True;
  {Get extended error information}
  mSend1.Lines.Add(Format('%d - %s%s',[Number,Description,Trim(ErrorStr)]));
  SMTP2.Cancel;
end;

procedure TForm1.SMTP2ProtocolStateChanged(Sender: TObject;
  ProtocolState: Smallint);
begin
  case ProtocolState of
  smtpTransaction:
    begin
      CreateHeaders;
      with SMTP2 do
        SendDoc(NoParam, DocInput.Headers, '', '', '');
    end;
  end;
end;

procedure TForm1.QuitSendTimer(Sender: TObject);
begin
  QuitSend.Interval := DisableTimer;
mSend1.Lines.Add('Protocol state = ' + IntToStr(SMTP2.Protocolstate));
  try
    SMTP2.Quit;
  except
    QuitSend.Interval := EnableTimer;
  end;
mSend1.Lines.Add('QuitSend out');  //************************************
end;

smile_tbw

Is there a reason that the SendDoc() meathod is passed in the ...

procedure TForm1.SMTP2ProtocolStateChanged(Sender: TObject;
         ProtocolState: Smallint);

The SendDoc() meathod you have seems to need a filename example...

procedure TMainForm.SendFile(Filename: string);
begin
  CreateHeaders;
  with SMTP1 do
  begin
    DocInput.Filename := FileName;
    SendDoc(NoParam, DocInput.Headers, NoParam, DocInput.FileName, '');
  end;

Later
BoRiS
but i have no attach file at all. so, do i need to pass a null pointer to the FileName or just DocInput.Filename := '' will do?
smile_tbw

If you aren't attachng a file the try this and see if it works

SendDoc(NoParam, DocInput.Headers, mSend1.Text, '', '');

Later
BoRiS
See if lines in the setup script file (.ini, .inf, .ins...) include lines like "registerdll" or "registerOCX" I don't remember what exactly, but you'll see if you look at it. These lines work like regsvr32 when the installation runs.