AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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
Старый 11.10.2012, 11:55   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Добавьте к определению функций WINAPI
X++:
int WINAPI Add(int a, int b)
...

int WINAPI Get()
...
и перекомпилируйте dll
__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2012, 13:15   #3  
York is offline
York
Участник
 
8 / 12 (1) ++
Регистрация: 11.08.2008
Я наверное шибко тупой, но и в этом случае никак не получается. Компилятор пишет
Цитата:
Ошибка 1 error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "Add"...
Куда я только не вставлял этот WINAPI - и в файле заголовка, и файле cpp... в различных комбинациях...
Может нужно включить какую директиву компилятора?
Старый 11.10.2012, 13:56   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от York Посмотреть сообщение
Я наверное шибко тупой, но и в этом случае никак не получается. Компилятор пишет


Куда я только не вставлял этот WINAPI - и в файле заголовка, и файле cpp... в различных комбинациях...
Может нужно включить какую директиву компилятора?
Добавьте в файл
X++:
#include <windows.h>
Макрос определен в файле WinDef.h как
X++:
#define WINAPI      __stdcall
Можно, так же, поменять в свойствах проекта Calling Convention на stdcall, либо включить ключ компиляции /Gd
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: York (1).
Старый 11.10.2012, 14:04   #5  
York is offline
York
Участник
 
8 / 12 (1) ++
Регистрация: 11.08.2008
Спасибо огромное! То что надо!
Понятно, что мне следует сначала почитать учебники, а не мучить глупыми вопросами добрых человеков, но хочется быстреько выяснить, если ли принципиальная возможность решения одной пороблемы, и если да, то уже приступить детально к вопросу. Еще раз спасибо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
MSDAX 4.0 и планировщик win server 2008 werov2010 DAX: Администрирование 11 16.08.2012 14:18
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:28.