关于"怎样将自己编写的c语言函数嵌入到c++builder" 的补充

deane 2000-04-26 06:36:00
这是小弟对以前的帖子"怎样将自己编写的c语言函数嵌入到c++builder" 的补充,
!
说明:
这是一个将给定字符串识别并合成相应的wav文件的程序,本程序以CA1606(航班号)为例,将其分解为C,A,1,6,0,6;
其中每个字符对应一个相应的语音文件,最终生成含有语音CA1606的number.wav,;
filecopy ,filelink ,fileopen,string组成的函数在borland c下通过并成功;a.wav及n1.wav等在bcb的bin下;

源程序如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <string.h>
#include "s2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

//声明函数
void string(char *str_number);
void filelink(FILE *f,FILE *nf) ;
void fileopen (char *file1,char *file2,char *file3,char *file4,char *file5,
char *file6,char *file7);
void filecopy(void) ;

//调用string函数
string("CA1606");

//以下为各函数的c源代码;
// string 的c语言源函数
string(char *str_number)
{
int i;
char *p,*file[6];
char a0[]={"a.wav"},a1[]={"b.wav"},a2[]={"c.wav"},a3[]={"d.wav"},a4[]={"e.wav"},a5[]={"f.wav"},a6[]={"g.wav"};
char a7[]={"h.wav"},a8[]={"i.wav"},a9[]={"j.wav"},a10[]={"k.wav"},a11[]={"l.wav"};
char a12[]={"m.wav"},a13[]={"n.wav"},a14[]={"o.wav"},a15[]={"p.wav"},a16[]={"q.wav"};
char a17[]={"r.wav"},a18[]={"s.wav"},a19[]={"t.wav"},a20[]={"u.wav"},a21[]={"v.wav"};
char a22[]={"w.wav"},a23[]={"x.wav"},a24[]={"y.wav"},a25[]={"z.wav"},b0[]="n0.wav";
char b1[]="n1.wav",b2[]="n2.wav",b3[]="n3.wav",b4[]={"n4.wav"},b5[]={"n5.wav"};
char b6[]={"n6.wav"},b7[]={"n7.wav"},b8[]={"n8.wav"},b9[]={"n9.wav"};
p=str_number;
i=0;


while ((*p!='\0')&&(i<=5))
{
switch (*p)
{
case 'a': case 'A':file[i]=a0;break;
case 'b': case 'B':file[i]=a1;break;
case 'c': case 'C':file[i]=a2;break;
case 'd': case 'D':file[i]=a3;break;
case 'e': case 'E':file[i]=a4;break;
case 'f': case 'F':file[i]=a5;break;
case 'g': case 'G':file[i]=a6;break;
case 'h': case 'H':file[i]=a7;break;
case 'i': case 'I':file[i]=a8;break;
case 'j': case 'J':file[i]=a9;break;
case 'k': case 'K':file[i]=a10;break;
case 'l': case 'L':file[i]=a11;break;
case 'm': case 'M':file[i]=a12;break;
case 'n': case 'N':file[i]=a13;break;
case 'o': case 'O':file[i]=a14;break;
case 'p': case 'P':file[i]=a15;break;
case 'q': case 'Q':file[i]=a16;break;
case 'r': case 'R':file[i]=a17;break;
case 's': case 'S':file[i]=a18;break;
case 't': case 'T':file[i]=a19;break;
case 'u': case 'U':file[i]=a20;break;
case 'v': case 'V':file[i]=a21;break;
case 'w': case 'W':file[i]=a22;break;
case 'x': case 'X':file[i]=a23;break;
case 'y': case 'Y':file[i]=a24;break;
case 'z': case 'Z':file[i]=a25;break;
case '0':file[i]=b0;break;
case '1':file[i]=b1;break;
case '2':file[i]=b2;break;
case '3':file[i]=b3;break;
case '4':file[i]=b4;break;
case '5':file[i]=b5;break;
case '6':file[i]=b6;break;
case '7':file[i]=b7;break;
case '8':file[i]=b8;break;
case '9':file[i]=b9;break;
}
p++;i++;
}
fileopen(file[0],file[1],file[2],"number.wav",file[3],file[4],file[5]);
}


// fileopen为将C,A,1,6,0,6合成number.wav的函数,filelink,filecopy,为连接语音文件函数,涉及到wav头文件的格式问题,不必细究
fileopen (char *file1,char *file2,char *file3,char *file4,char *file5,
char *file6,char *file7)
{
if ((f1=fopen(file1,"rb"))==0)
{printf("filecopy f1 failure");exit(0);}
if ((f2=fopen(file2,"rb"))==0)
{printf("flink f2 failure");exit(0);}
if ((f3=fopen(file3,"rb"))==0)
{printf("flink f3 failure");exit(0);}
if ((f4=fopen(file4,"wb+"))==0)
{printf("flink f4 failure");exit(0);}
if ((f5=fopen(file5,"rb"))==0)
{printf("flink f5 failure");exit(0);}
if ((f6=fopen(file6,"rb"))==0)
{printf("flink f6 failure");exit(0);}
if ((f7=fopen(file7,"rb"))==0)
{printf("flink f7 failure");exit(0);}
filecopy();
filelink(f2,f4);
filelink(f3,f4);
filelink(f5,f4);
filelink(f6,f4);
filelink(f7,f4);
fclose (f1);fclose(f2);fclose(f3);
fclose (f4);fclose(f5);fclose(f6);fclose(f7);
}

//copy file
filecopy(void)
{
int n=0;
char ch;
rewind (f1);rewind (f4);
while (fread (buff,512,1,f1))
{ fwrite (buff,512,1,f4);
n++;
}
fseek (f1,n*512L,0);

while (!feof(f1))
{
ch=fgetc(f1); fputc(ch,f4);
}
}


//file link
filelink(FILE *f,FILE *nf)
{
int n=0; char ch;
//get length
fseek(nf,54L,0);fread(&s1,4,1,nf);fseek(f,54L,0);fread(&s2,4,1,f);
s4=s1+s2-1;s3=s4+50;
//write length
fseek (nf,4L,0);fwrite (&s3,4,1,nf);fseek(nf,54L,0);fwrite(&s4,4,1,nf);
//link files
fseek (nf,-1L,2);fseek (f,58L,0);
n=0;
while (fread(buff,512,1,f))
{
fwrite (buff,512,1,nf);
n++;
}
fseek(f,512L*n,0);
while (!feof(f))
{
ch=fgetc(f); fputc(ch,nf);
}
}


//---------------------------------------------------------------------------

附头文件:

//---------------------------------------------------------------------------
#ifndef s2H
#define s2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
char buff[512];
FILE *f1,*f2,*f3,*f4,*f5,*f6,*f7;
long s1,s2,s3,s4;
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
void filestring(char *str_number);
void filelink(FILE *f,FILE *nf) ;
void fileopen (char *file1,char *file2,char *file3,char *file4,char *file5,
char *file6,char *file7);
void filecopy(void) ;
public: // User declarations
__fastcall TForm1(TComponent* Owner);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
本程序运行后出现3个错误:
[C++ Error] s2.cpp(172): E2134 Compound statement missing }.
[C++ Error] s2.cpp(32): E2188 Expression syntax.
[C++ Error] s2.cpp(172): E2379 Statement missing ;.
小弟几经调试也不成功,望指教!!!






...全文
179 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexela 2000-06-08
  • 打赏
  • 举报
回复
你到底是程序有问题还是嵌入有问题?

void filestring(char *str_number);
void filelink(FILE *f,FILE *nf) ;
void fileopen (char *file1,char *file2,char *file3,char *file4,char *file5,
char *file6,char *file7);
void filecopy(void) ;
看见你这些函数的申明,原形定义怎么不见了?定义友元不是这样子的!!!也不必在调用前申明(BUTTONCLICK中)
你的程序我没时间看,只要程序没问题,在头文件中包含你这些函数的定义就应该没问题。
[C++ Error] s2.cpp(172): E2134 Compound statement missing }.
[C++ Error] s2.cpp(32): E2188 Expression syntax.
[C++ Error] s2.cpp(172): E2379 Statement missing ;.
你的这些错误消息是低级错误。全是语法不真确造成的。好好检查吧(根据提示里的错误行号)
pcly 2000-06-01
  • 打赏
  • 举报
回复
你的程序长且烂,本人有心帮忙又不想看程序,
下次搞一个小的
Email pcailiyuan@263.net

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧