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

  #2  
Старый 20.11.2008, 02:05
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
С нами: 9885926

Репутация: 1188


Lightbulb

значить вот такая история с подключением dll..
сначала когда массив задавался в самой библиотеке
(int mas[5]={0,1,2,3,4} все работало без претензий при любом значении int Number, int am, int bm, int cm всегда получали правильное решение.
библиотека выглядела так:
Код:
#include "stdafx.h"
#include <conio.h>

int calc (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;
}
Другим цветом выделил часть кода которая работает с массивом.

потом массив я передал с другой функции, так как было описано ТУТ
для проверки корректности передачи элементов использовал вывод каждого
Код:
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;
	char sdll[100] = {0};
	sprintf(sdll,"%d", mas[1]);
	MessageBoxA(NULL, sdll,"Result", NULL);
	if(r==9){..........
тут все нормально. элементы массива корректно могут считываться и использоваться библиотекой.
но сам асм код который отвечает за обработку массива в результат кидал постоянно значения типа 3645435664 или 8764599943.....
вышел с положения только С++ кодом...
Код:
if(r==9){
	int temp=0;
	for(int i=0;i<n;i++)
	 {
	    temp=temp+mas[i];
	 }
	resalt=cm +temp ;
}
так и не понял почему предыдущий РАБОТАЮЩИЙ асм код для массива который был обьявлен внутри dll не покатил для массива который передаем из другой функции...
а нужно именно асм код..
трабла в адресации памяти? или хз?
кто что посоветует?
спасибо.

-------------------EDIT---------------------------
решение проблемы - пост от bons.
bons, спасибо.
-------------------EDIT---------------------------

Последний раз редактировалось NetSter; 21.11.2008 в 19:38.. Причина: решение проблемы.
 
Ответить с цитированием