Тема: dll в Ax 3.0
Показать сообщение отдельно
Старый 11.10.2012, 11:34   #1  
York is offline
York
Участник
 
8 / 12 (1) ++
Регистрация: 11.08.2008
? dll в Ax 3.0
Добрый день, уважаемые знатоки.

В Visual Studio есть такой проект C++:
Файл DLLTest.h :
Код:
int Add(int a, int b);
int Get();
Файл DLLTest.cpp :
Код:
// DLLTest.cpp
// compile with: /EHsc /LD

#include "DLLTest.h"

#include <stdexcept>

using namespace std;

int Add(int a, int b)
{
    return a + b;
}

int Get()
{
    return 33;
}
и файл DLLTest.def :
Код:
LIBRARY	"DLLTest"
EXPORTS
Add
Get
В Axapta 3.0 написал такой джобик:
X++:
static void GJ_DLLTest2(Args _args)
{
    DLL dll = new DLL("C:\\DLLTest.dll");
    DLLFunction fAdd, fGet;
    int r;
;
    //-------------------------------------
    fGet = new DLLFunction(dll, "Get");
    fGet.returns(ExtTypes::DWord);

    r = fGet.call(); // отрабатывает "на ура"

    info(queryValue(r)); // возвращает 33
    //-------------------------------------
    fAdd = new DLLFunction(dll, "Add");
    fAdd.returns(ExtTypes::DWord);
    fAdd.arg(ExtTypes::DWord,ExtTypes::DWord);

    r = fAdd.call(1,2); // ОШИБКА!!!

    info(queryValue(r));
    //-------------------------------------

    fAdd.finalize();
    fGet .finalize();
    dll.finalize();
}
В первом случае вызова функции без параметров отрабатывает правильно.
Во втором случае, где производится попытка вызова функции с параметрами, выдает следующее сообщение:
Цитата:
Значение регистра ESP не было сохранено при вызове функции "Add" в библиотеке DLL "C:\DLLTest.dll". Причиной может являться вызов функции DLL, которая объявлена с неверным числом аргументов.
Читал темы на форуме по похожей проблеме, то так и не помогло понять: где я не прав. Сразу скажу, что в C++ и Viasual Studio я полнейший профан.

Направьте, пожалуйста, на путь истинный )))

Последний раз редактировалось York; 11.10.2012 в 11:45. Причина: не верно процитировал def