PDA

View Full Version : استفاده از کلاسهای ++c در #C



هم دانشگاهی
جمعه 29 شهریور 1392, 10:18 صبح
سلام
چطوری میشه از کلاسی که در یک Dll سی پلاس پلاس نوشتم و در سی شارپ import کردم، شی درست کنم و پس از انجام محاسبات شی رو به سی شارپ بدم و اطلاعات رو استفاده کنم؟

ممنون

FastCode
جمعه 29 شهریور 1392, 10:27 صبح
جست و جو کنید:
swig

هم دانشگاهی
جمعه 29 شهریور 1392, 11:01 صبح
روشهای دیگه ای نیست؟
نمیشه از خود کتابخانه های دات نت استفاده کرد؟

FastCode
جمعه 29 شهریور 1392, 11:03 صبح
روشهای دیگه ای نیست؟
نمیشه از خود کتابخانه های دات نت استفاده کرد؟
واقعا سرچ کردی؟
عزیزم اول جست و جو کن.ببین موضوع چیه.چطوری کار میکنه.بعد بگو "نمیشه از خود کتابخانه های دات نت استفاده کرد؟"

هم دانشگاهی
شنبه 30 شهریور 1392, 11:28 صبح
سلام
من تونستم فایلهای cxx رو بسازم ولی وقتی پروژه سی شارپ رو ران میکنم، لینکر اررور میده
کدها به صورت زیره:
clss_file.h

class cpp_file
{
public:
cpp_file(void);
~cpp_file(void);

int times2(int arg);
};
class_file.cpp

#include "cpp_file.h"


cpp_file::cpp_file(void)
{
}
cpp_file::~cpp_file(void)
{
}
int cpp_file::times2(int arg)
{
return arg * 2;
}

cpp_file.i



/* cpp_file.i */
%module cpp_file
%{
/* Put header files here or function declarations like below */
extern int times2(int arg);
%}
extern int times2(int arg);

cpp_file.cs

using System;
using System.Runtime.InteropServices;

public class cpp_file {
public static int times2(int arg) {
int ret = cpp_filePINVOKE.times2(arg);
return ret;
}

}


اما این اررور رو میده:

Error 1 error LNK2019: unresolved external symbol "int __cdecl times2(int)" (?times2@@YAHH@Z) referenced in function _CSharp_times2@4

Error 2 error LNK1120: 1 unresolved externals

هم دانشگاهی
شنبه 30 شهریور 1392, 12:22 عصر
کار دیگه باید انجام بدم؟

FastCode
شنبه 30 شهریور 1392, 13:39 عصر
سلام
من تونستم فایلهای cxx رو بسازم ولی وقتی پروژه سی شارپ رو ران میکنم، لینکر اررور میده
کدها به صورت زیره:
clss_file.h

class cpp_file
{
public:
cpp_file(void);
~cpp_file(void);

int times2(int arg);
};
class_file.cpp

#include "cpp_file.h"


cpp_file::cpp_file(void)
{
}
cpp_file::~cpp_file(void)
{
}
int cpp_file::times2(int arg)
{
return arg * 2;
}

cpp_file.i



/* cpp_file.i */
%module cpp_file
%{
/* Put header files here or function declarations like below */
extern int times2(int arg);
%}
extern int times2(int arg);

cpp_file.cs

using System;
using System.Runtime.InteropServices;

public class cpp_file {
public static int times2(int arg) {
int ret = cpp_filePINVOKE.times2(arg);
return ret;
}

}


اما این اررور رو میده:
برای من کار کرد.نمیدونم مشکل چیه.احتمالا از VC++ ه چون gcc صداش هم در نمیاد.

هم دانشگاهی
شنبه 30 شهریور 1392, 15:19 عصر
باید چه جوری نصبش کنم؟ من mingw رو نصب کردم.

FastCode
شنبه 30 شهریور 1392, 15:57 عصر
باید چه جوری نصبش کنم؟ من mingw رو نصب کردم.
mingw همون gcc ه توی ویندوز.
دستوراتی که نوشتی رو کامل بزار اینجا

هم دانشگاهی
شنبه 30 شهریور 1392, 17:24 عصر
من دستوری ننوشتم، روی فایل i. کلیک راست کردم و گزینه کامپایل رو زدم. بعد کامپایل شد. در واقع میشه گفت کدی باید mingw ننوشتم.
لطفا راهنمایی کنین

FastCode
شنبه 30 شهریور 1392, 17:42 عصر
من دستوری ننوشتم، روی فایل i. کلیک راست کردم و گزینه کامپایل رو زدم. بعد کامپایل شد. در واقع میشه گفت کدی باید mingw ننوشتم.
لطفا راهنمایی کنین
با ویژوال استودیو زدی کامپایل؟
فکر نکردی پس نقش swig اینجا چیه؟

UfnCod3r
شنبه 30 شهریور 1392, 17:53 عصر
کلاس رو کلا لازم نیست تو سی++ داشته باشی می تونی توابع رو به صورت سی استایل بنویسی بعد تو سی# هر مدلی که خواستی پیداه سازی کنی این طوری راحت تر هم هست البته خود دات نت یه سری صفت ها داره اون رو به ساختار ها بدی خودش توابع عضو و .. رو درست می شناسه . سرچ لطفا .
درضمن کلاس توی دات نت با کلاس توی سی ++ فرق داره .
کلا یا همه رو یا با سی++ بنویس یا سی# اینطوری الکی وقتت میره و کلی هم باگ دستت میاد

هم دانشگاهی
شنبه 30 شهریور 1392, 18:49 عصر
با ویژوال استودیو زدی کامپایل؟
فکر نکردی پس نقش swig اینجا چیه؟

دستورش چیه ؟
میشه یه راهنمایی کلی از اول تا آخرش بکنی؟ واقعا ممنون

FastCode
شنبه 30 شهریور 1392, 19:58 عصر
دستورش چیه ؟
میشه یه راهنمایی کلی از اول تا آخرش بکنی؟ واقعا ممنون
http://www.swig.org/tutorial.html

هم دانشگاهی
شنبه 30 شهریور 1392, 21:19 عصر
ممنون، من طبق چیزی که گفته بود رفتم، ولی این خط رو

gcc -c -fpic example.c example_wrap.c
که تو cmd مینویسم این اررور رو میده:

gcc: error: CreateProcess: No such file or directory
خط اول رو تونستم اجرا کنم

ممنون

FastCode
شنبه 30 شهریور 1392, 22:19 عصر
ممنون، من طبق چیزی که گفته بود رفتم، ولی این خط رو

gcc -c -fpic example.c example_wrap.c
که تو cmd مینویسم این اررور رو میده:

خط اول رو تونستم اجرا کنم

ممنون
PATH رو درست تنظیم نکردید.
http://stackoverflow.com/questions/13321980/yet-another-mingw-gcc-error-createprocess-no-such-file-or-directory

هم دانشگاهی
شنبه 30 شهریور 1392, 23:55 عصر
بازم درست نشد، مسیر path رو هم تغییر دادم ولی درست نشد . . .

FastCode
یک شنبه 31 شهریور 1392, 06:53 صبح
بازم درست نشد، مسیر path رو هم تغییر دادم ولی درست نشد . . .
path نه PATH
فرق داره.

هم دانشگاهی
یک شنبه 31 شهریور 1392, 14:13 عصر
path نه PATH
فرق داره.

من روی mycomputer راست کلیک میکنم، Properties، بعد Advanced system settings رو میزنم. اونجا Enviroment variable رو میزنم و بعد در قسمت System variable به path مسیر زیر رو اضافه میکنم:

C:\MinGw\libexec\gcc\mingw32\4.7.1

باید کار دیگه ای انجام بدم؟!

FastCode
یک شنبه 31 شهریور 1392, 15:49 عصر
C:\MinGw\libexec\gcc\mingw32\4.7.1
غلطه
درستش اینه:
C:\MinGw
(الان شک کردم که تا کجاش باید باشه ولی فکر میکنم همین باشه)