ما يقابل هاته الدالة في delphi
#1
السلام عليكم ورحمة الله وبركاته

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

StringToHGlobalAnsi
الرد
#2
وعليك السلام ورحمة الله تعالى و بركاته

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

لاكن أعتقد هي دالة خاصة بـ .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;
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • taha moh
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم