看了很多類似的問題討論,但是仍然無法應用在我的情況,不知道是哪裡出了問題,我依照類似的指示將我VB的程式修改成如下,但執行時必當機,煩請各位替我想想如何解決,多謝...
Part1: VB的檔案
Public Declare Function InitializeDLL Lib "ReadData" () As Boolean
Public Declare Sub ReleaseDLL Lib "ReadData" ()
Public Declare Function get_CountOfDailyData Lib "ReadData" (ByVal stockno As String, ByVal revise As Boolean) As Integer
Public Declare Function TinaReadDailyData Lib "ReadData" (ByVal no As String, ByVal re As Boolean, o As Double, h As Double, l As Double, c As Double, v As Double, va As Double, d As Double, ByVal count As Integer, cer As Double) As Integer
Sub main()
If InitializeDLL <> False Then
Dim o(1 To 1000) As Double
Dim h(1 To 1000) As Double
Dim l(1 To 1000) As Double
Dim c(1 To 1000) As Double
Dim v(1 To 1000) As Double
Dim va(1 To 1000) As Double
Dim dates(1 To 1000) As Double
Dim cer(1 To 1000) As Double
ii = get_CountOfDailyData("2330", False)
'這一步可以執行
i = TinaReadDailyData("2330", False, o(1), h(1), l(1), c(1), v(1), va(1), dates(1), 1000, cer(1))
'上面這一行導致當機
ReleaseDLL
End If
End Sub

Part2: c語言的檔

void _export pascal TinaReadIndexDailyData(int indexno,double *open,double *high,
double *low,double *close,double *volume,double *okvalue,double *dates,int MaxCount)
{
int i,j,count;
  int d,m,y,handle;
  FILE *fp;
  AnsiString file;
  if(!IsOkay)
   return;
  file=(AnsiString)DataPath+(AnsiString)IndexTableNames[indexno];
  fp=fopen(file.c_str(),"rb");
  if(fp==NULL)
   return;
  handle=fileno(fp);
  count=filelength(handle)/36;
  if(MaxCount!=0 && MaxCount<count)
  {
   fseek(fp,(count-MaxCount)*36,0);
   count=MaxCount;
  }
  for(i=0;i<count;i++)
 {
   fread(&j,sizeof(int),1,fp);
   d=(unsigned short)(j-j/100*100);
   m=(unsigned short)((j-j/10000*10000)/100);
   y=(unsigned short)(1911+j/10000);
   dates[i]=(double)TDateTime(y,m,d);
   fread(&j,sizeof(int),1,fp);
   open[i]=(double)j/100.0;
   fread(&j,sizeof(int),1,fp);
   high[i]=(double)j/100.0;
   fread(&j,sizeof(int),1,fp);
   low[i]=(double)j/100.0;
   fread(&j,sizeof(int),1,fp);
   close[i]=(double)j/100.0;
   fread(&j,sizeof(int),1,fp);
   okvalue[i]=(double)j;
   fread(&j,sizeof(int),1,fp);
   volume[i]=(double)j;
   fread(&j,sizeof(int),1,fp);
   fread(&j,sizeof(int),1,fp);
  }
  fclose(fp);
}
arrow
arrow
    全站熱搜

    vbqa 發表在 痞客邦 留言(11) 人氣()