26-04-2020, 11:40 PM
27-04-2020, 01:57 AM
وعليك السلام ورحمة الله تعالى و بركاته
لا أضن أن الدلفي يحتوي على مثل هذه
لاكن أعتقد هي دالة خاصة بـ .net
لكن يمكن ارفاق المكتبة الخاصة بها وإستدعائها Library1.dll
مثال
أو راجع الموضوع التالي من هنا
رغم وجود من يستعملها لكن تبقى الطريقة
لا أضن أن الدلفي يحتوي على مثل هذه
لاكن أعتقد هي دالة خاصة بـ .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;