PDA

View Full Version : مشکل در کامپایل فایل dll



limpizik
جمعه 19 دی 1393, 14:01 عصر
سلام دوستان.من یه فایل dll ایجاد کردم و قصدم اینه که ازش خروجی بگیرم و در یک برنامه دیگه ازش استفاده کنم کدهای من اینه :

using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;
using System.IO;
using System.Reflection;

namespace UDKManagedTestDLL
{
internal static class UnmanagedExports
{
[DllExport("getLastStatus", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static string getLastStatus(int ECIndex)
{
// ...
return "Your string";
}

}
}
اما این error ها رو دریافت میکنم

127405

ممنون میشم دوستان راهنماییم کنند

بیتا حکمت
جمعه 19 دی 1393, 15:12 عصر
using RGiesecke.DllExport;


فکر می کنم به خاطر استفاده از فضای نام بالا ، شما باید Dll مورد نیاز رو به پروژه اتون اضافه کنید

limpizik
جمعه 19 دی 1393, 15:29 عصر
امکانش هست بیشتر راهنمایی کنید؟ممنوم

M.KH-SH
جمعه 19 دی 1393, 16:09 عصر
دوست عزیز شما از یک کتابخانه دیگه استفاده کردی ولی به برنامه نگفتی که این کتابخانه کجا هستش و به پروژه اضافه نکردی.
برای این کار فایل dll رو پیدا کن و از طریق Add Reference به برنامه اضافش کن و دوباره Build بگیر.

limpizik
جمعه 19 دی 1393, 16:50 عصر
رفقا من قصدم اینه که یه dll با C#‎‎‎‎‎‎ بنویسم و بعد اونو در زبان mql (زبان مربوط به بورس) بخونم در این لینک (https://www.mql5.com/en/articles/249) چند مثال آورده ولی من در کامپایلشون به مشکل بر میخورم...مثال لینک رو هم اینجا(مثال 4.1) میزارم
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace Testme
{
class Test
{

[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}

[DllExport("Sub", CallingConvention = CallingConvention.StdCall)]
public static int Sub(int left, int right)
{
return left - right;
}

[DllExport("AddDouble", CallingConvention = CallingConvention.StdCall)]
public static double AddDouble(double left, double right)
{
return left + right;
}

[DllExport("AddFloat", CallingConvention = CallingConvention.StdCall)]
public static float AddFloat(float left, float right)
{
return left + right;
}

}
}

دوستان خیلی کارم گیره ممنون میشم اگه عنایت کنید

limpizik
یک شنبه 21 دی 1393, 09:35 صبح
دوستان من بالاخره تونستم dll رو build کنم اما هر کاری میکنم نمیتونم متد هاش رو بخونم.آیا باید dll رو پابلیش کنم؟بنده visual studio 2013 دارم.(پروژه رو attach میکنم تا دوستان راهنمایی کنند)

SabaSabouhi
یک شنبه 21 دی 1393, 09:41 صبح
سلام
کلاسی که می‌خواین متدهاش رو بخونید نباید internal باشه. حتماً باید public باشه.
کلاس یا متد internal فقط داخل همون dll قابل دسترسی هست.
کلاس و متد مورد نظر خودتون رو public کنید و به راحتی ازش استفاده کنید.

صبا صبوحی

limpizik
یک شنبه 21 دی 1393, 10:31 صبح
سلام
کلاسی که می‌خواین متدهاش رو بخونید نباید internal باشه. حتماً باید public باشه.
کلاس یا متد internal فقط داخل همون dll قابل دسترسی هست.
کلاس و متد مورد نظر خودتون رو public کنید و به راحتی ازش استفاده کنید.

صبا صبوحی

ممنونم از پاسختون.کلاس public هست.شما سورس رو باز کردید؟

SabaSabouhi
یک شنبه 21 دی 1393, 13:57 عصر
سلام
هنگامی که به صراحت نوع کلاس رو مشخص نکنید، internal در نظر گرفته می‌شود.
برای ایجاد یک کلاس public حتماً این عبارت رو جلوی نام کلاس قید کنید.
برای دسترسی به کلاس Test و متد Add نیازی به اون دو خط Attribute بالای کلاس نیست.

توصیه می‌کنم سعی کنید از پیش‌فرض‌ها استفاده نکنید و به ویژه access modifier ها رو صراحتاً قید کنید.
غیر از این که جلوی مشکلات این‌چنینی رو می‌گیره، کد شما رو هم خواناتر می‌کنه.

صبا صبوحی

limpizik
یک شنبه 21 دی 1393, 20:51 عصر
سلام
هنگامی که به صراحت نوع کلاس رو مشخص نکنید، internal در نظر گرفته می‌شود.
برای ایجاد یک کلاس public حتماً این عبارت رو جلوی نام کلاس قید کنید.
برای دسترسی به کلاس Test و متد Add نیازی به اون دو خط Attribute بالای کلاس نیست.

توصیه می‌کنم سعی کنید از پیش‌فرض‌ها استفاده نکنید و به ویژه access modifier ها رو صراحتاً قید کنید.
غیر از این که جلوی مشکلات این‌چنینی رو می‌گیره، کد شما رو هم خواناتر می‌کنه.

صبا صبوحی
یه دنیا ممنون از پاسختون.اما بنده واژه public رو هم پشت class Test آوردم با اینحال باز هم نتونستم از dll خروجی بگیرم.
گویا در نرم افزاری که بنده میخام از فایل dll در اون استفاده کنم کدها به این شکل قالب بندی شده (لینک) (https://www.mql5.com/en/articles/249)
127475

خانوم صبوحی اگه براتون امکانش هست سورس قابل استفاده رو برای بنده آپلود کنید تا من از قالبش الگو برداری کنم.
مرسی که تا همینجا هم کمک کردید

SabaSabouhi
دوشنبه 22 دی 1393, 16:02 عصر
سلام
فایل ضمیمه رو دریافت کنید.
در ضمن من آقای صبوحی هستم. :)

صبا صبوحی

limpizik
چهارشنبه 24 دی 1393, 11:41 صبح
سلام
فایل ضمیمه رو دریافت کنید.
در ضمن من آقای صبوحی هستم. :)

صبا صبوحی

یه دنیا ممنون.ببخشید.اسم saba گمراه کننده بود :)