I have the Segment-Plane collision function which I translated from C to Pascal, from the book Real-Time Collision Detection. You might be able to emulate the ray using a very large segment:

Code:
//------------------------------------------------------------------------------
function ch_IntersecaSegmentoPlano(
  const S1, S2: gr_rVector3D;  // Puntos del segmento
  const P1: gr_rPlano3D;
  var T: Single;
  var P: gr_rVector3D
  ): Boolean;

  var
    AB: gr_rVector3D;

begin
  Result := True;
  AB := gr_Resta(S2, S1);
  T := (P1.PP-gr_ProductoPunto(P1.N, S1))/gr_ProductoPunto(P1.N, AB);

  if &#40;T >= 0&#41; and &#40;T <= 1&#41; then
  begin
    P &#58;= gr_Suma&#40;S1, gr_Multiplica&#40;AB, T&#41;&#41;;
    Exit;
  end;

  Result &#58;= False;
end;
Sorry for the spanish, but it should be easy to understand (if you don't I can translate it). I highly recomend that book that explains very well most of the collision routines.