一段vc程序如何转换成delphi程序(200分)

  • 主题发起人 Michaelzhao
  • 开始时间
M

Michaelzhao

Unregistered / Unconfirmed
GUEST, unregistred user!
本人不会vc程序,需要将一vc程序转换成delphi程序,以下是部分程序,请问如何转换,
拜托了,如需要全部程序,可留下qq,本人qq:56306306
DllImport short Inithxms(char*,HWND);
DllImport int MakeAndSendData(BYTE*,BYTE,short,short,void*);
DllImport short StartPDAMenu(char* FileName,int RecordNum);
DllImport bool AddMenu(PREMOTEMENU pMenu);
DllImport void ClosePDAMenu();
DllImport short StartPDATeste(char* FileName,int RecordNum);
DllImport bool AddTeste(PREMOTETASTE pTeste);
DllImport void ClosePDATeste();
DllImport bool UpdateActive(bool isActive);
DllImport void CloseCom();
DllImport int hxmsOrder(BYTE* pbuf,PTASKUSER pTask);
DllImport bool AddMenuLb(char *chLbName,unsigned char lbid,unsigned char Type);
DllImport void ClosePDAMenuLb();
DllImport short StartPDAMenuLb(char* FileName,int RecordNum);


typedef struct tagTASKINFO {
unsigned short tiTableNumber;
unsigned short tiFoodID;
int tiFoodQuanlity;
int tiFoodPrice;
unsigned short tiIndex;
unsigned short tiWorkID;
unsigned char tiTaste[8];
unsigned int tiStatus;
}TASKITEM, *PTASKITEM;


PREMOTETASTE p;
CPtrList pNoteList;
COleDateTime UpdateTime;

int nCount =0;
// nCount=m_pDb->GetUpdateNote(UpdateTime,pNoteList);

POSITION pos = pNoteList.GetHeadPosition();

StartPDATeste(".//Teste.dbv",nCount);
while ( pos != NULL)
{
POSITION prepos = pos;
p = (PREMOTETASTE)pNoteList.GetNext(pos);
if(p->Operation==1)
AddTeste(p);
free(p);
pNoteList.RemoveAt(prepos);
}
ClosePDATeste();

int CBHCY_SERDlg::TranslateData(BYTE *rbuf, int len)
{
int nDataLen = 0;
short ErrorCode = 0;
PWG_HEADPDA pwg_head;
PDATAERR pde;
unsigned char err_buf[SIZE_ERR],total=0;
CString str, strTmp;
CTime t = CTime::GetCurrentTime();
int i=0;

memset(err_buf, 0, SIZE_ERR);
//memcpy(buf, rbuf, len);

pwg_head = (PWG_HEADPDA)rbuf;
pde = (PDATAERR)err_buf;

for(i=0;i <16;i++)
total+=rbuf;
if(total!=pwg_head->totalhead)
return 1;
total=0;
for(i=18;i <ntohs(pwg_head->DataLen);i++)
total+=rbuf;
if(total!=pwg_head->totaldata)
return 1;//较验错误,不处理,直接返回
switch ( pwg_head->CommandType )
{
case CmdID_Login:
{
PLONGPARAMETER pml;

pml = (PLONGPARAMETER)(rbuf + SIZE_HEADPDA);

strTmp.Format("登录命令用户[%d]%s",ntohs(pml->lpAccount),pml->lpPasswd);
Addmessage(strTmp);
pde->errCode=htons(ERR_LOGIN_OK);

pde->retCount=0;
::MakeAndSendData(pwg_head->HardID,CmdID_Error,1,sizeof(DATAERR),err_buf);
}
break;
 
贴代码。。。。
dll:function FunctionName(parameters): ReturnValue; stdcall; external 'DllName.ll';
record:
TRecordName = packed record
Variable1: type
..
end;
[8D]
 
你好,andrew57,我可以发vc的代码给你,你帮我看看,能转换成delphi代码吗,一个小程序,内容不多的
 
vc中void*,byte*,unsigned char,CPtrList pNoteList,
在delphi中都可以用哪种类型表示
 
就是 Pointer、PByte、Char 啊
 
谢了,那CPtrList呢
 
CPtrList 应该是 mfc 专有的对象类型,可能不好接啊
不过由于 delphi 和 c++ 对象模型基本上相同,也许可以用 object 或 interface 模拟出来,这得看看它的定义了。
 
vc中ntohs 和 ntohl在delphi中是哪个函数啊
 
另htons,htonl
 
哈哈
你忙到夜里了,帮你提醒下吧
void* =pointer(需要你理解指针,这样套是没错的 其实在WIN32也就是个也就是个Integer)
byte*=pbyte
unsigned char=byte
CPtrList pNoteList 是mfc的特殊类型,delphi里面没有对应的,你可以通过数组来模拟
 
POSITION在delphi中是怎么定义的啊,这一段怎么改
POSITION pos = pNoteList.GetHeadPosition();

StartPDATeste(".//Teste.dbv",nCount);
while ( pos != NULL)
{
POSITION prepos = pos;
p = (PREMOTETASTE)pNoteList.GetNext(pos);
if(p->Operation==1)
AddTeste(p);
free(p);
pNoteList.RemoveAt(prepos);
}
 
最后一个问题pwg_head = (PWG_HEADPDA)rbuf;如何转换成delplhi
答完结帖
 
多人接受答案了。
 
顶部