|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
передача массива в DLL
постановка задачи: нужно было с функции передать в DLL библиотеку значения А, В, С, и т.д. и одномерный массив для вычисления функции, библиотека возвращает результат операции или же код ошибки (тоже результат 666).
реализация:
глобальные переменные
Код:
int mas[5];
int el, g;
int m_a[5], m_b[5],m_c[5],m_matrix[80];
int Number;
int am,bm,cm;
Функция RUN
Код:
void CMyFrameWin::OnRun()
{
char sq[80];
FILE *read;
read=fopen("matrix.txt","r");
while(!feof(read)){
for(int g=0;g<5;g++)
{
fscanf(read,"%d",&el);
mas[g]=el;
fscanf(read,"\n");
sprintf(sq,"%d", mas[g]);
MessageBox(sq,"ELEMENT MASIVA"); // проверка елементов
}
}
int res;
HINSTANCE hDll;
char s[100];
hDll=::LoadLibrary("MyDll");
if (hDll == NULL)
{
::MessageBox(NULL,"ERROR","ERROR! File MyDll.dll not found!",MB_OK| MB_ICONSTOP);
}
else
{
typedef int (*FUN)(int*,int,int,int,int);
FUN func;
func=(FUN)::GetProcAddress(hDll, "calc");
res=(*func)(mas,Number,am,bm,cm);
if (res==666)
{
::MessageBox(NULL,"ERROR! ","DATA ERROR!",MB_OK| MB_ICONSTOP);
}
else
{ sprintf(s,"%d", res);
MessageBox(s,"Result");
//создание и запись результата в файл
FILE *result;
result=fopen("result.txt","w");
fprintf(result,"%d",res);
fclose(result);
}
::FreeLibrary(hDll);
}
массив заполняется значениями из файла matrix.txt вида :
и собственно сама dll - ка
Код:
#include "stdafx.h"
#include <conio.h>
int calc ( int *mas, int Number, int am, int bm, int cm)
{
int r=Number;
int a=am,b=bm,c=cm,n=5,resalt;
//int mas[5]={0,1,2,3,4};
if(r==9){
_asm{
mov eax,0
mov ecx,n
lea esi,mas
l1:
add eax,[esi]
add esi,4
loop l1
add eax,c
mov resalt,eax
}}
else if(r<=5){
_asm{
mov eax,a
sub eax,c
mov a,eax
mov eax,b
mul b
add eax,a
mov ebx,c
cdq
div ebx
mov resalt,eax
}}
else resalt=666;
return resalt;
}
если массив не передавать а забить в dll типа так
//int mas[5]={0,1,2,3,4};
то dll - ка работает нормально, а массив передать никак не получается. В результате получаем хз что.. типа 343987428... и т.д.
кто разбирается посмотрите что там в коде не так... где то я втыкаю.. или у кого есть ссыль на хелп по передаче массива в dll буду рад почитать.
спасибо.
|