PDA

View Full Version : سوال: ارتباط بین دو نرم افزار



farmande
شنبه 02 آذر 1387, 18:29 عصر
سلام
من قصد دارم که یک برنامه بنویسم (سی #)که برخی از محاسبات ریاضی مثل مشتق گیری . انتگرال گیری را انجام بده
حا می خواستم بدونم میشه بین نرم افزار قدرتمند مطلب (یا یک نرم افزار دیگه)و سی # ارتباط برقرارکرد؟
میشه؟

jeyjix
شنبه 02 آذر 1387, 19:59 عصر
سلام دوست خوبم ..امكانش هست
من خودم دنبال اين بودم اما يه جور ديگه مشكلم رو حل كردم
اما اين لينك جواب شماست :
http://profqo.com/viewtopic.php?f=43&p=319




می دانیم که Matlab ابزار قدرتمندی را در زمینه پردازش تصویر در اختیار ما قرار می دهد که به دلیل وجود ساختارهای ماتریسی در Matlab استفاده از این توابع بسیار راحت می باشد . مشکل موجود و عمده این توابع و حتی Matlab سرعت پایین در اجرا است که در مورد پردازش تصویر که معمولا باید به صورت Online باشند غیر قابل قبول است و همین امر Matlab را تنها به یک شبیه ساز در مبحث پردازش تصویر تبدیل نموده است . اما چه اتفاقی می افتد اگر بتوانیم در کنار ساختارهای ماتریسی Matlab از سرعت بالای Visual C++.Net استفاده نماییم ؟ در این مبحث قصد داریم با ذکر یک مثال طریقه تبدیل تابع های Matlab به DLL و استفاده از آن ها در Visual C++.Net را بیان نماییم :
کارهایی که باید در Matlab انجام دهیم :(این یک مثال است و می توانید در مورد تابع های دیگر Matlab نیز از آن استفاده نمایید)
1 - ابتدا یک M-File در Matlab ایجاد نمایید (به شکل زیر ) و آن را foo.m بنامید :
function y = foo(x)
y = x+1
این تابع را در شاخه Work ذخیره نمایید .(البته در این مقاله این فرض در نظر گرفته شده )
2 - دستور زیر را در Matlab تایپ کرده و Enter را فشار دهید :
mbuild -setup
بعد از اجرای این دستور Matlab کامپایلر های موجود بر روی کامپیوتر شما را تشخیص داده و از شما می خواهد یکی را انتخاب کنید ( متناسب با ورژن .NET انتخاب نمایید)
3 - حال با استفاده از دستور زیر DLL تابع خود را ایجاد می نماییم
mcc -B csharedlib:foolib foo.m
حال باید فایل های زیر در شاخه جاری (Work) ایجاد شده باشد »
foolib.ctf
foolib.h
foolib.dll
foolib.lib
foolib.exp
foolib_mcc_component_data.c
foolib.c
foolib.exports
در Visual C++.Net کارهای زیر را انجام دهید :
1- Visual C++.Net را راه اندازی نمایید .
2 - به منو فایل رفته و New را انتخاب نمایید . در Templates رفته و Win32 Console Project را انتخاب نمایید . در فیلد Name نامی اختیاری مانند Test قرار داده وOk را فشار دهید . در Win32 application Wizard گزینه Application Settings را انتخاب و در Additional Options گزینه Empty project را چک مارک بزنید و دکمه Finish را بفشارید .
3 - تب Solution Explorer را انتخاب کنید و سپس Source Files و سپس Project menu option را انتخاب کرده و بعد از آن Add New Item را بفشارید . در Templates tab گزینه C++ Source file را انتخاب نموده و فیلد نام آن را foowrap قرار دهید و دکمه Open را کلیک کنید .
4 - کد زیر را وارد نمایید :
/* Include the MCR header file and the library specific header file
* as generated by MATLAB Compiler */
#include "mclmcr.h"
#include "foolib.h"

#include <stdio.h>

int main()
{
mxArray *x_ptr;
mxArray *y_ptr=NULL;
double *y;
double ret;



/* Call the MCR and library initialization functions */
if( !mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n");
exit(1);
}

if (!foolibInitialize())
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}

/* Create an mxArray to input into mlfFoo */
x_ptr = mxCreateDoubleScalar(1);

/* Call the implementation function */
/* Note the second input argument should be &y_ptr instead of y_ptr*/
mlfFoo(1,&y_ptr,x_ptr);

/* The return value from mlfFoo is an mxArray so we must extract the data from it */
y = mxGetPr(y_ptr);
ret = *y;

/* Print a double precision number*/
printf("The output of foo is %f\n",ret);

/* Call the library termination function */
foolibTerminate();

mxDestroyArray(x_ptr);
mxDestroyArray(y_ptr);
mclTerminateApplication();
return 0;
}
5- پروژه خود را از Solution Explorer انتخاب نموده و به منو Project رفته و گزینه Option را انتخاب نمایید . در این قسمت از صفحه کنار Properties را انتخاب نموده و در Linker folder رفته و General category را انتخاب نمایید . مکان foolib.lib و $MATLAB\extern\lib\win32\microsoft\msvc71 را (Matlab مسیر نرم افزار Matlab شماست ) را به Additional Library در بخش Directories اضافه نمایید . مثلا به این صورت در می آید c:\foo;$MATLAB\extern\lib\win32\microsoft\msvc71
6 - به قسمت Input رفته و در قسمت Additional Dependencies موارد زیر را وارد کنید :
mclmcrrt.lib
foolib.lib
7 - به C/C++ folder رفته و در General در بخش Additional Include directories آدرس $MATLAB\extern\include که (Matlab مسیر نرم افزار Matlab شماست ) را اضافه نمایید همچنین مسیری که foolib.h در آن قرار گرفته است .
8 - در برگه C/C++ رفته و Code Generation را انتخاب نمایید . در Runtime Library گزینه Multi-threaded DLL را انتخاب و Ok کنید .
9 - پروژه خود را Rebuild کنید .
10 - شما باید موارد foolib.dll and foolib.ctf را در جایی که exe پروژه شما قرار دارد قرار دهید .