PDA

View Full Version : سوال: دستور و نحوه درست کردن دی ال الی که در بقیه زبانها نیز بتوان از آن استفاده کرد



nsco_nsco
سه شنبه 05 بهمن 1389, 23:29 عصر
سلام دوستان می خواستم بدونم چطور می توانم کاری کنم که یک دی ال ال را برای زبانهای دیگر نیز بتوانم استفاده کنم این برنامه زیر رو ممنون می شم بگید چطوری برای زبانهای دیگر نیز استفاده کنم ::لبخند:



library Project1;

uses
SimpleShareMem,
SysUtils,
Classes;

{$R *.res}

function SayWelcome: string;
begin
Result := 'سلام شما خوبید';
end;

exports
SayWelcome;
begin
end.



ممنون می شم کمکم کنید البته هر چی سریعتر بهتر :تشویق::لبخند::خجالت:

Felony
چهارشنبه 06 بهمن 1389, 05:59 صبح
در مورد این تابع کافیه دایرکتیو stdcall رو به تعریف تابعت اضافه کنی :


library Project1;

uses
SimpleShareMem,
SysUtils,
Classes;

{$R *.res}

function SayWelcome: string; stdcall;
begin
Result := 'سلام شما خوبيد';
end;

exports
SayWelcome;
begin
end.

BORHAN TEC
چهارشنبه 06 بهمن 1389, 08:00 صبح
اگر می خواهید که این تابع ذکر شده را در .net بکار ببرید نوع برگشتی تابع را از نوع PWideChar در نظر بگیرید که دقیقاً معادل Stringدر دات نت است. برای استفاده از این تابع در دات نت باید از مشخصه(Attribute) ای با نام DllImport برای هرکدام از متدها استفاده کنید و CPU Type را هم بر روی x86 تنظیم کنید.

Veyskarami
چهارشنبه 06 بهمن 1389, 10:48 صبح
میتونی به obj تبدیل کنی بعد اونو با کامپایلر سی به dll تبدیل کنی.

nsco_nsco
پنج شنبه 07 بهمن 1389, 00:01 صبح
سلام دوستان ممنون از پاسخ سریع شما
من زمانی که میام string; رو به فانکشن ها اضافه می کنم دیگه نمی توانم در خود برنامه دلفی از اون فایل دی ال ال استفاده کنم ممنون می شوم راهنماییم کنید با تشکر البته سریعتر مممنون:قلب::قلب:

nsco_nsco
پنج شنبه 07 بهمن 1389, 00:03 صبح
ببخشدی اگر ممکنه در مورد این که گفتید کمی توضیح دهید :



میتونی به obj تبدیل کنی بعد اونو با کامپایلر سی به dll تبدیل کنی.

و نیز اگر ممکنه آقای عشایری بیشتر و اگر ممکنه یک مثال برای این توضیحاتی که دادید بزنید با تشکر از همه شما دوستان :قلب::خجالت:

Felony
پنج شنبه 07 بهمن 1389, 00:08 صبح
سلام دوستان ممنون از پاسخ سریع شما
من زمانی که میام string; رو به فانکشن ها اضافه می کنم دیگه نمی توانم در خود برنامه دلفی از اون فایل دی ال ال استفاده کنم ممنون می شوم راهنماییم کنید با تشکر البته سریعتر مممنون
موقع ساخت DLL خود دلفی هم بهتون هشدار های لازم رو به عنوان Comment میده ، ولی شما بهش توجه نکردی !
ShareMem رو به عنوان اولین کتابخانه به لیست Uses های DLL معرفی کن .

nsco_nsco
پنج شنبه 07 بهمن 1389, 00:20 صبح
سلام ممنون از پاسخ سریعتون اما من به یوزرها اضافه کردم ولی باز نمایش نمی دهد ببینید :



ShareMem,
SimpleShareMem,
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
StrUtils,
ExtCtrls,
ComCtrls,
TabNotBk,
HTTPApp,
ColorGrd,
DateUtils,
Math;



ممنون می شوم کمکم کنید با تشکر :تشویق:

Felony
پنج شنبه 07 بهمن 1389, 00:31 صبح
قبلا بارها تو همین بخش در این مورد بحث شده ، جست و جو کنید و اگر به نتیجه نرسیدید کد کامل یا پروژتون رو قرار بدید .

nsco_nsco
پنج شنبه 07 بهمن 1389, 00:50 صبح
سلام برنامه به شکل زیر هست :

دی ال ال :



library Project1;

uses
ShareMem,
SimpleShareMem,
SysUtils,
Classes;

{$R *.res}

function SayWelcome: string; stdcall;
begin
Result := 'سلام شما خوبيد';
end;

exports
SayWelcome;
begin
end.


اگزه :


function SayWelcome:string; external 'Project1.dll'
Label1.Caption := SayWelcome;


ممنون می شوم توضیح دهید با تشکر :قلب:

Felony
پنج شنبه 07 بهمن 1389, 06:58 صبح
خوب اصلا چه دلیلی داره که String ارسال میکنید ؟ میتونید نوع بازگشتی رو PChar در نظر بگیرید :


library Project1;

uses
SysUtils,
Classes;

{$R *.res}

function SayWelcome: PChar; stdcall; cdecl;
begin
Result := 'سلام شما خوبيد';
end;

exports
SayWelcome;

begin
end.

استفاده در برنامه :


function SayWelcome: PChar; external 'Project1.dll';

ShowMessage(SayWelcome);

nsco_nsco
شنبه 09 بهمن 1389, 23:59 عصر
سلام ببخشید چند روز به علت مشکلات نبودم ممنون می شوم یک توضیحی در مورد برنامه و مخصوصا این دستور ات بفرمایید:
cdecl;

PChar;

ممنون از کمک شما:قلب:

BORHAN TEC
یک شنبه 10 بهمن 1389, 10:06 صبح
cdecl;یک نوع Calling Convention است که بیشتر در سیستم عاملهای مبتنی بر Unix استفاده می شود. برای مشاهده جزئیات بیشتر در این رابطه به راهنمای دلفی مراجعه کنید. ما در windows پنج نوع Calling Convention داریم. من پیشنهاد می کنم که تا جایی که ممکن است از stdcal استفاده کنید.

PChar;در نسخه های قبل از دلفی 2009 نوع PChar معادل AnsiChar^ و در نسخه های دلفی 2009 و نسخه های بعدی معادل WideChar^ است. البته ممکن است که در آینده باز هم در این ضمینه تغییراتی را مشاهده کنیم. اگر این موضوع را می خواهید بهتر متوجه شوید باید با اشاره گرها در دلفی آشنا باشید.