delphi4arab منتديات دلفي للعرب
ما يقابل هاته الدالة في delphi - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ما يقابل هاته الدالة في delphi (/showthread.php?tid=10798)



ما يقابل هاته الدالة في delphi - taha moh - 26-04-2020

السلام عليكم ورحمة الله وبركاته

اريد معرفة ما يقابل هاته الدالة في الدالفى

StringToHGlobalAnsi


RE: ما يقابل هاته الدالة في delphi - larbiparadox - 27-04-2020

وعليك السلام ورحمة الله تعالى و بركاته

لا أضن أن الدلفي يحتوي على مثل هذه

لاكن أعتقد هي دالة خاصة بـ .net

لكن يمكن ارفاق المكتبة الخاصة بها وإستدعائها Library1.dll

مثال

كود :
unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     procedure Button1Click(Sender: TObject);   private     { Déclarations privées }   public     { Déclarations publiques }   end; function Multiplier(a: Integer; b: Integer): Integer; stdcall;external 'Library1.dll'; var   Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin   i := Multiplier(13,2);   ShowMessage(IntToStr(i)); end; end.

أو راجع الموضوع التالي من هنا

رغم وجود من يستعملها لكن تبقى الطريقة
كود :
publicstructPTask { publicIntPtrcommand;//命令,4位 publicIntPtrtaskType;//任务类型,4位 publicIntPtrtaskID;//任务ID,32位 publicIntPtrsrcTaskID;//最初任务ID,32位 publicIntPtrsrcRequesterID;//最初请求方ID,12位 publicIntPtrsenderID;//发送方ID,12位 publicIntPtrreceiverID;//接收方ID,每个12位 publicIntPtrpriority;//优先级,1位 publicIntPtrisACK;//是否要求回执,1位 publicIntPtrinvalidation;//失效时间,13位 publicIntPtrsentTime;//数据发送时间,14位 publicIntPtrtaskName;//任务名称,32位 publicIntPtrtaskBody;//任务体 } [DllImport("PCI2.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)] publicstaticexternIntPtrsendTask(refPTasktask,IntPtrip,IntPtrport); [DllImport("PCI2.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)] publicstaticexternIntPtrreceiveTask(refPTasktask,IntPtrip,IntPtrport,refboolother); [DllImport("PCI2.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)] publicstaticexternstringerrorCodeTrans(IntPtrname); [DllImport("PCI2.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)] publicstaticexternstringfree_char(IntPtrname); { stringresult=string.Empty; PTaskoTask; PTaskoTask2; IntPtriTask=IntPtr.Zero; IntPtriRet=IntPtr.Zero; stringsError=string.Empty; stringsRet=string.Empty; stringsTask=string.Empty; boolbTmp; inti=0; IntPtrsIp=IntPtr.Zero; IntPtrsPort=IntPtr.Zero; try { result=""; oTask=newPTask(); oTask.senderID=Marshal.StringToHGlobalAnsi(PopSendId); oTask.receiverID=Marshal.StringToHGlobalAnsi(PopReceiveId); oTask.taskName=Marshal.StringToHGlobalAnsi("query"); oTask.taskBody=Marshal.StringToHGlobalAnsi(GetBody(sCode)); //oTask.taskBody=Marshal.StringToCoTaskMemAuto(GetBody(sCode)); sIp=Marshal.StringToHGlobalAnsi(PopIp); sPort=Marshal.StringToHGlobalAnsi(PopPort); iTask=sendTask(refoTask,sIp,sPort); sTask=Marshal.PtrToStringAnsi(iTask); if(sTask.Length!=32) { sError=errorCodeTrans(iTask); free_char(iTask); } bTmp=true; oTask2=newPTask(); oTask2.senderID=Marshal.StringToHGlobalAnsi(PopSendId); oTask2.receiverID=Marshal.StringToHGlobalAnsi(PopReceiveId); oTask2.taskName=Marshal.StringToHGlobalAnsi("query"); oTask2.taskBody=Marshal.StringToHGlobalAnsi(""); oTask2.srcTaskID=Marshal.StringToHGlobalAnsi(sTask.Substring(0,sTask.Length-1)); //free_char(iTask); Thread.Sleep(3000); for(i=1;i32then begin sError:=errorCodeTrans(sTask); free_char(sTask); error(sError); end; finally //free_char(sTask); end; bTmp:=true; ZeroMemory(@oTask2,SizeOf(TTask)); oTask2.senderID:=pchar(Global.GetConfig('PopSendId')); oTask2.receiverID:=pchar(Global.GetConfig('PopReceiveId')); oTask2.taskName:='query'; oTask2.taskBody:=''; oTask2.srcTaskID:=PChar(Copy(sTask,1,Length(sTask))); free_char(sTask); Sleep(StrToInt(Global.GetConfig('PopSleepTime'))); fori:=1to20do begin sRet:=ReceiveTask(@oTask2,pchar(sIp),pchar(sPort),@bTmp); ifsRetnilthen try iflength(sRet)=4then begin sError:=errorCodeTrans(sTask); free_char(sRet); error(sError); end else begin Result:=sRet; free_char(sRet); end; break; finally //free_char(sRet); end; Sleep(StrToInt(Global.GetConfig('PopSleepTime'))); end; except onEx:Exceptiondo begin RaiseError(Ex,'GetPCI'); end; end; finally end; end;