PDA

View Full Version : سوال: استفاده از dll زبان c++ در سي شارپ



mesgar
دوشنبه 28 مرداد 1387, 02:09 صبح
سلام
من الان يك dll با زبان سي پلاس پلاس به نام "dll_new.dll"ساخته ام با كد :


#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
};
char name[100];
char* GetName()
{
GetModuleFileName(NULL,name,100);
return name;
}
و بعد يك پروژه سي شارپ ساخته ام تا بتوانم از آن dll استفاده كنم با كد :


private const string DLLFileName = @"dll_new.dll";
[DllImport(DLLFileName, EntryPoint = "GetName")]
public static extern string GetName();
public Form1()
{
InitializeComponent();
MessageBox.Show(GetName());
}
ولي هنگام اجرا هنگامي كه به خط نشان دادن مسيج باكس مي رسد ارور مي دهد كه :
Unable to find an entry point named 'GetName' in DLL 'dll_new.dll'.
نمي دانم مشكل كجاست ؟؟؟
ممنون مي شم اگه كسي راهنماييم كند

pesare_ariyayi
دوشنبه 28 مرداد 1387, 07:32 صبح
خوب من تا اونجایی که مخم جواب میده چنتا کار رو می گم امتحان کنی.
اولاً چرا جای دستی imprort کردن فایلت رو add نمی کنی؟ واسه این کار باید solution explorer رو باز کنی (معمولاً سمت راست ویژوال استودیو هست) روی پروژه ات کلیک راست کن و Add Refrence رو کلیک کن و بعد فایل dll رو انتخاب کن.
اگر عشقت می کشه که دستی وارد کنی, قبل از getname() تو پروژه ات اسم namespace رو بنویس. مثل namespace.GetName()
تو C# که اگه تو تعریف method از کلمه public یا private استفاده نکنیم به صورت پیشفرض method رو public حساب می کنه. نمی دونم این قضیه راجع به c++ چطوره. واسه اطمینان قبل از تعریف getname() از public استفاده کن
این چنتا راهی بود که به ذهنم زدن

mesgar
دوشنبه 28 مرداد 1387, 09:45 صبح
سلام
ممنون از پاسختون ولي
dll هاي نوشته شده با زبان c++ رو نميشه به صورتي كه گفتيد به پروژه اضافه كرد و ارور مي دهد و روش كلي اضافه كردنش به همين شكل مي باشد
در مورد namespace بايد بگم من در كد dll از namespace استفاده نكرده ام كه حالا بخوام بنويسمش(همه كد dll را نوشته ام)
اين قضيه public يا private هم تو كلاس معني ميده كه من باز از كلاسي استفاده نكرده ام و با اضافه كردن public ارور مي دهد