المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : التعامل مع dll مبرمجة بـ c#.net في ديلفي


maosalah
26-08-2010, 12:50 AM
السلام عليكم ورحمة الله وبركاته
رمضان كريم للجميع

لدي ملف DLL مبني علي C#.NET احتاج لاتصال به عن طريق Delphi 7

وجدت طريقة عن طريق ComObject لكن ليس لدي كود ال DLL

هل توجد طريقة اخري

سلام

TF6M
26-08-2010, 04:54 AM
و عليكم السلام و رحمة الله و بركاته
1- مرحبا بك اخي معنا , فقط راجع قوانين المشاركات .
2- مواضيع دات صلة :
كيف ابعث متغير لدالة في ملف dll ثم احصل على النتيجة (http://www.delphi4arab.com/forum/showthread.php?t=2486)
طريقة تحويل البرنامج الى مكتبات dll (http://www.delphi4arab.com/forum/showthread.php?t=2249&highlight=%E3%DF%CA%C8%C9)
معرفة function المصدرة من مكتبة DLL (http://www.delphi4arab.com/forum/showthread.php?t=2590&highlight=%E3%DF%CA%C8%C9)
بالتوفيق,,

maosalah
27-08-2010, 04:07 AM
السلام عليكم

شكرا اخي tf6m علي الرد

1- مرحبا بك اخي معنا , فقط راجع قوانين المشاركات .

الله يسلمك اخي
اسف ان كنت اخطأت لقر راجعت قوانين المشاركات

2- مواضيع دات صلة :

هذه المواضيع متعلقة بالمكتبات dll win32 وليست مكتبات net.


وشكرا

TF6M
27-08-2010, 07:30 AM
- هناك عدة طرق , للأسف غابت عني لعدم إهتمامي بالـ Net.
أبسط طريقة :
1- حمل Assembly Registration Tool (Regasm.exe) (http://msdn.microsoft.com/fr-fr/library/tzat5yw6%28VS.80%29.aspx)
2- تحصل على الـ Lib من الـ Dll بهذا الخيار :
Regasm MyDll.dll /tlb:MyLib.tlb3- الأن من المفترض التحصل على ملف MyLib.tlb , قم بنسخه & MyDll.dll , مثلا و أرفقهما
بالبرنامج j(YourApp)
4- إذا كنت تستخدم دلفي 7 , قم بإظافة الـ Lib من :
Project->Import Type Library -> Add ->أو دلفي 2010 :
Toolz ->Option ->Library - Translated ->Translated Library Path-> Add ->4- لا تنسى إظافة :
uses ComObj;5- الأن يمكنك إستدعاء الـ Methods & Classes , كالـ DllWin32 .

- في ما يخص الـ Typesا :
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
- أيضا معلومات جيدة ذات صلة : Importing a C#.NET dll into Delphi (http://www.pcreview.co.uk/forums/thread-3097659.php)
بالتوفيق,,

kachwahed
27-08-2010, 01:15 PM
السلام عليكم
الاستخدام من خلال COM راجع Using a .NET Assembly via COM by Jim McKeeth هنا:
http://edn.embarcadero.com/article/32754
CrossTalk من البرامج تجارية:
http://atozed.com/CrossTalk/index.en.aspx
قد يفيدك من MSDN هذا:
http://msdn.microsoft.com/en-us/library/zsfww439%28VS.71%29.aspx
بالتوفيق.

maosalah
28-08-2010, 12:37 AM
السلام عليكم ورحمة الله وبركاته

نم حل المشكل شكرا للاخ TF6M

هذا مثال لتعم الفائدة ان شاء الله

كود ال C#


// MyInterface.cs
public interface MyInterface
{
int Add(int i1, int i2);
}


// MyDLL.cs
using System.Runtime.InteropServices;

[ClassInterface(ClassInterfaceType.None)]
public class MyDLL : MyInterface
{
public int Add(int i1, int i2)
{
return i1+i2;
}
}

الان

1- حمل Assembly Registration Tool (Regasm.exe)
2- تحصل على الـ Lib من الـ Dll بهذا الخيار :

Regasm MyDll.dll /tlb:MyLib.tlb




3- الأن من المفترض التحصل على ملف MyLib.tlb , قم بنسخه & MyDll.dll , مثلا و أرفقهما
بالبرنامج j(YourApp)
4- إذا كنت تستخدم دلفي 7 , قم بإظافة الـ TLB من :


Project->Import Type Library -> Add ->



تم اضغط علي Create Unit

5- لا تنسى إظافة :

uses ComObj, MyDLL_TLB;


للاستدعاء

procedure TForm1.Button1Click(Sender: TObject);
var
intfRef: MyInterface;
result: Integer;
begin
intfRef := CreateComObject(CLASS_MyDLL_) as MyInterface;
result := intfRef.Add(2, 2);
..
.
end;

سلام