新手,提问原来C++Builder3的工程转换到C++Builder 6后编译出现问题

WAPQQ 2007-07-27 08:26:36
代码


#ifndef RSCOM_H
#define RSCOM_H

#include <Forms.hpp>
#include <Classes.hpp>
#include <SysUtils.hpp>
#include <Windows.hpp>
#include <System.hpp>
#include <Syncobjs.hpp>

namespace Rscom
{
//-- type declarations -------------------------------------------------------
enum TCommBaudRateStd { cbr110 ,cbr300 ,cbr600 ,cbr1200 ,cbr2400 ,
cbr4800 ,cbr9600 ,cbr14400 ,cbr19200 ,cbr38400 ,
cbr56000 ,cbr57600 ,cbr115200,cbr128000,cbr256000 };

enum TCommByteSize { cbs4, cbs5, cbs6, cbs7, cbs8 };

enum TCommParity { cpNone, cpOdd, cpEven, cpMark, cpSpace };

enum TCommStopBits { csb1, csb15, csb2 };

enum TCommDelimMode { cdlmNone , cdlm , cetx };

enum TCommFlowControl { cfXonXoff, cfDtrDsr, cfRtsCts };

typedef Set<TCommFlowControl, cfXonXoff, cfRtsCts> TCommFlowControls;

enum TCommEvent { evRxChar,evRxFlag,evTxEmpty ,evCts ,
evDsr ,evRlsd ,evBreak ,evErr ,
evRing ,evPerr ,evRx80full,evEvent1,evEvent2 };

typedef Set<TCommEvent, evRxChar, evEvent2> TCommEvents;

class PACKAGE TRsComm;
class PACKAGE TCommThread;
class PACKAGE TSendThread;

typedef void __fastcall (__closure *TRxNotifyEvent)(TRsComm* Sender, DWORD Size);
typedef void __fastcall (__closure *TTxNotifyEvent)(TRsComm* Sender);
typedef void __fastcall (__closure *TCommNotifyEvent)(TRsComm* Sender, DWORD EventMask);

struct sndrcv_s {
char sndBuffer[ 1024 ];
char rcvBuffer[ 1024 ];
DWORD Status;
Byte ReadOK;
Byte ReadERR;
};
...全文
225 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fqbnet2050 2007-11-13
  • 打赏
  • 举报
回复
看不懂,
beijingbeerman 2007-11-12
  • 打赏
  • 举报
回复
楼主c++ builder 能否给我一个安装包,xianren2440@sina.com
Santos 2007-07-28
  • 打赏
  • 举报
回复
缺少类定义。

检查一下原来环境中引用的包路径吧。
i_love_pc 2007-07-27
  • 打赏
  • 举报
回复
TCommEvents
TCommFlowControls

这两个是什么东东??
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
//-- template instantiations -------------------------------------------------
template TCommEvents ;
template TCommFlowControls ;
i_love_pc 2007-07-27
  • 打赏
  • 举报
回复
出错的是哪一行?
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
对是串口类

主要问题可能在这,我感觉可能应该把类分割分割
[C++ Error] Rscom.h(258): E2505 Explicit instantiation requires an elaborated type specifier (i.e., "class foo<int>")
[C++ Error] Rscom.h(259): E2505 Explicit instantiation requires an elaborated type specifier (i.e., "class foo<int>")
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
希望提供问题原因和解决问题办法
谢谢
i_love_pc 2007-07-27
  • 打赏
  • 举报
回复
看起来像是一个串口类

'RsComm1' 是不是一个类的对象呢?
Undefined symbol 'RsComm1'是说这个对象没有定义
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
错误提示
Build
[C++ Error] Rscom.h(258): E2505 Explicit instantiation requires an elaborated type specifier (i.e., "class foo<int>")
[C++ Error] Rscom.h(259): E2505 Explicit instantiation requires an elaborated type specifier (i.e., "class foo<int>")
[C++ Error] Jrn001.cpp(609): E2451 Undefined symbol 'RsComm1'
[C++ Error] Jrn001.cpp(894): E2451 Undefined symbol 'RsComm1'
[C++ Warning] Jrn001.cpp(908): W8004 'st_suu' is assigned a value that is never used
[C++ Warning] Jrn001.cpp(908): W8004 'pal_suu' is assigned a value that is never used
[C++ Warning] Jrn001.cpp(908): W8004 'dat_size' is assigned a value that is never used
[C++ Warning] Jrn001.cpp(908): W8004 'baut' is assigned a value that is never used
[C++ Warning] Jrn001.cpp(908): W8004 'com_p' is assigned a value that is never used
[C++ Error] Jrn001.cpp(913): E2451 Undefined symbol 'RsComm1'
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
class PACKAGE ECommError;
class PACKAGE ECommError : public Sysutils::Exception
{
typedef Sysutils::Exception inherited;

public:
/* Exception.Create */
__fastcall ECommError(const System::AnsiString Msg) : Sysutils::Exception(Msg){ }
/* Exception.CreateFmt */
__fastcall ECommError(const System::AnsiString Msg, const System::TVarRec
* Args, const int Args_Size) : Sysutils::Exception(Msg, Args, Args_Size) { }
/* Exception.CreateRes */
__fastcall ECommError(int Ident) : Sysutils::Exception(Ident) { }
/* Exception.CreateResFmt */
__fastcall ECommError(int Ident, const System::TVarRec * Args, const int
Args_Size) : Sysutils::Exception(Ident, Args, Args_Size) { }
/* Exception.CreateHelp */
__fastcall ECommError(const System::AnsiString Msg, int AHelpContext) :
Sysutils::Exception(Msg, AHelpContext) { }
/* Exception.CreateFmtHelp */
__fastcall ECommError(const System::AnsiString Msg, const System::TVarRec
* Args, const int Args_Size, int AHelpContext) : Sysutils::Exception(Msg, Args, Args_Size, AHelpContext
) { }
/* Exception.CreateResHelp */
__fastcall ECommError(int Ident, int AHelpContext) : Sysutils::Exception(
Ident, AHelpContext) { }
/* Exception.CreateResFmtHelp */
__fastcall ECommError(int Ident, const System::TVarRec * Args, const
int Args_Size, int AHelpContext) : Sysutils::Exception(Ident, Args, Args_Size, AHelpContext) { }

public:
/* TObject.Destroy */
__fastcall virtual ~ECommError(void) { }
};

//-- var, const, procedure ---------------------------------------------------
extern void __fastcall Register(void);
//-- template instantiations -------------------------------------------------
template TCommEvents ;
template TCommFlowControls ;

} /* namespace Rscom */
#if !defined(NO_IMPLICIT_NAMESPACE_USE)
using namespace Rscom;
#endif
//-- end unit ----------------------------------------------------------------
#endif //* ( RSCOM_H ) */
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
class PACKAGE TRsComm : public Classes::TComponent
{
typedef Classes::TComponent inherited;
friend class TCommThread;
friend class TSendThread;

private:
HANDLE FHandle;
Byte FPort;
DWORD FBaudRate;
TCommBaudRateStd FBaudRateStd;
TCommByteSize FByteSize;
TCommParity FParity;
TCommStopBits FStopBits;
TCommFlowControls FFlowControls;

TCommDelimMode FDelimMode;
Byte FDelimChar;

DWORD FQueueIn;
DWORD FQueueOut;
Word FQueXonLim;
Word FQueXoffLim;
bool FFlowBug;

TCommEvents FEvents;
DWORD FEventMask;
TRxNotifyEvent FOnCommReceive;
TTxNotifyEvent FOnCommTransmit;
TCommNotifyEvent FOnCommEvent;
TCommThread *FCommThread;
TSendThread *FSendThread;
OVERLAPPED FReadOl;
void __fastcall SetDcb(void);
DWORD __fastcall BaudToBps(TCommBaudRateStd Value);
DWORD __fastcall EventsToMask(TCommEvents Value);
// TCommEvents __fastcall MaskToEvents(DWORD dwEvtMask);

protected:
virtual void __fastcall DoCommReceive(void);
virtual void __fastcall DoCommTransmit(void);
virtual void __fastcall DoCommEvent(DWORD dwEvtMask);

public:
__fastcall virtual TRsComm(Classes::TComponent* AOwner);
__fastcall virtual ~TRsComm(void);
int __fastcall Open(Byte Port,
DWORD dwBps,
TCommByteSize iByteSize,
TCommParity iParity,
TCommStopBits iStopBits,
TCommDelimMode iDelimMode,
Byte iDelimChar);


void __fastcall Close(void);
DWORD __fastcall Read(void *Buffer, DWORD Size);
DWORD __fastcall ReadBuffer(struct sndrcv_s *pSndRcv,
char *rcvPutp);
int __fastcall Getch(void);
void __fastcall Write(const void *Buffer, DWORD Size);
void __fastcall Puts(const System::AnsiString &Str);
void __fastcall Putch(char Data);
void __fastcall SendBreak(void);
void __fastcall SetParameters(DWORD dwBps,
TCommByteSize iByteSize,
TCommParity iParity,
TCommStopBits iStopBits,
TCommFlowControls iFlowControls);
void __fastcall SetDtr(bool Dtr);
void __fastcall SetRts(bool Rts);
bool __fastcall isOpen(void);
bool __fastcall isDsr(void);
bool __fastcall isCts(void);
bool __fastcall isRing(void);
bool __fastcall isRlsd(void);
void __fastcall RxPurge(void);
void __fastcall TxPurge(void);
int __fastcall SndRcv( struct sndrcv_s *pSndRcv,
Byte bAddMode );
__property HANDLE Handle = {read=FHandle, nodefault};
TThreadList *sndrcvList;
int iSndEnd;
__published:
__property Byte Port = {read=FPort, write=FPort, default=1};
__property DWORD BaudRate = {read=FBaudRate, write=FBaudRate, default=0};
__property TCommBaudRateStd BaudRateStd = {read=FBaudRateStd, write=FBaudRateStd, default=cbr9600};
__property TCommByteSize ByteSize = {read=FByteSize, write=FByteSize, default=cbs8};
__property TCommParity Parity = {read=FParity, write=FParity, default=cpNone};
__property TCommStopBits StopBits = {read=FStopBits, write=FStopBits, default=csb1};
__property TCommFlowControls FlowControls
= {read=FFlowControls, write=FFlowControls, default=4/*cfRtsCts*/};
__property TCommDelimMode DelimMode
={ read=FDelimMode,write=FDelimMode,default=cdlm};
__property Byte DelimChar = {read=FDelimChar,write=FDelimChar,default=0x0a};
__property DWORD QueueIn = {read=FQueueIn, write=FQueueIn, default=4096};
__property DWORD QueueOut = {read=FQueueOut, write=FQueueOut, default=4096};
__property Word QueXonLim = {read=FQueXonLim, write=FQueXonLim, default=1024};
__property Word QueXoffLim = {read=FQueXoffLim, write=FQueXoffLim, default=3072};
__property bool FlowBug = {read=FFlowBug, write=FFlowBug, default=false};
__property TCommEvents Events = {read=FEvents, write=FEvents, default=0};
__property TRxNotifyEvent OnCommReceive = {read=FOnCommReceive, write=FOnCommReceive};
__property TTxNotifyEvent OnCommTransmit = {read=FOnCommTransmit, write=FOnCommTransmit};
__property TCommNotifyEvent OnCommEvent = {read=FOnCommEvent, write=FOnCommEvent};
};

class PACKAGE TCommThread : public Classes::TThread
{
typedef Classes::TThread inherited;
friend void __fastcall TRsComm::Close(void);
friend void __fastcall TRsComm::Write(const void *Buffer, DWORD Size);
friend void __fastcall TRsComm::Puts(const AnsiString &Str );
friend DWORD __fastcall TRsComm::ReadBuffer(struct sndrcv_s *pSndRcv,char *rcvPutp);
friend void __fastcall TRsComm::RxPurge(void);
friend void __fastcall TRsComm::TxPurge(void);

private:
TRsComm *FComm;
struct sndrcv_s *pSndRcv;
char *rcvPutp;
int rcvCount;
protected:
virtual void __fastcall Execute(void);
virtual void __fastcall ExecuteEvent(void);

public:
__fastcall TCommThread(TRsComm* AOwner);
__fastcall virtual ~TCommThread(void) { }
};

class PACKAGE TSendThread : public Classes::TThread
{
typedef Classes::TThread inherited;
friend void __fastcall TRsComm::Close(void);
friend void __fastcall TRsComm::Write(const void *Buffer, DWORD Size);

private:
struct TSendQue {
char *FBuffer;
DWORD FSize;
};
TRsComm *FComm;
TCriticalSection *pLockNext;
TSendQue FSend1;
TSendQue FSend2;
TSendQue *FPNext;
TSendQue *FPSending;
OVERLAPPED FSendOl;
bool FReInit;

protected:
virtual void __fastcall Execute(void);

public:
__fastcall TSendThread(TRsComm* AOwner);
__fastcall virtual ~TSendThread(void) { }
};
jacknes009 2007-07-27
  • 打赏
  • 举报
回复
应该是模板
WAPQQ 2007-07-27
  • 打赏
  • 举报
回复
不知道,应该是模板吧

13,825

社区成员

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

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