Добрый день, уважаемые знатоки.
В 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 я полнейший профан.
Направьте, пожалуйста, на путь истинный )))