значить вот такая история с подключением 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---------------------------