Показать сообщение отдельно

передача массива в DLL
  #8  
Старый 19.11.2008, 22:08
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме:
4275992

Репутация: 1188


Question передача массива в 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 вида :
Код:
0
1
2
3
4
и собственно сама 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 буду рад почитать.
спасибо.
 
Ответить с цитированием