Мда, а заглянуть в папку ..\experts\samples\DLLSample\.. своего терминала и просмотреть не сложный код примера не судьба?
OneDepo:
Мда, а заглянуть в папку ..\experts\samples\DLLSample\.. своего терминала и просмотреть не сложный код примера не судьба?
Мда, а заглянуть в папку ..\experts\samples\DLLSample\.. своего терминала и просмотреть не сложный код примера не судьба?
Вы говорите об этом -
MT4_EXPFUNC char* __stdcall GetStringValue(char *spar) { printf("GetDoubleValue takes \"%s\"\n",spar); return(spar); } А если я вызываю напрямую функцию: #import "kernel32.dll" int CreateFileMappingW ( int hFile, // INVALID_HANDLE_VALUE - use paging file int lpAttributes, // NULL - default security int flProtect, // PAGE_READWRITE - read/write access int dwMaximumSizeHigh, // maximum object size (high-order DWORD) - 0 int dwMaximumSizeLow, // maximum object size (low-order DWORD) - BUF_SIZE string szName // name of mapping object ); string MapViewOfFile ( int hFileMappingObject, // handle to map object int dwDesiredAccess, // FILE_MAP_ALL_ACCESS, - read/write permission int dwFileOffsetHigh, // 0 int dwFileOffsetLow, // 0 int dwNumberOfBytesToMap // BUF_SIZE ); #import #define INVALID_HANDLE_VALUE -1 #define PAGE_READWRITE 0x04 #define STANDARD_RIGHTS_REQUIRED 0x000F0000 #define SECTION_QUERY 0x0001 #define SECTION_MAP_WRITE 0x0002 #define SECTION_MAP_READ 0x0004 #define SECTION_MAP_EXECUTE 0x0008 #define SECTION_EXTEND_SIZE 0x0010 #define BUF_SIZE 256 string szName = "Global\\MyFileMappingObject"; string szMsg = "Message from first process."; int init() { int FILE_MAP_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE; //--- int hMapFile; string pBuf; hMapFile = CreateFileMappingW( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) BUF_SIZE, // maximum object size (low-order DWORD) szName); // name of mapping object if (hMapFile == NULL) { Print("Could not create file mapping object... "); return(1); } else Print("file mapping object handle = ",hMapFile); pBuf = MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); /* if (pBuf == " ") { Print("Could not map view of file..." ); // CloseHandle(hMapFile); return(1); } */ pBuf = szMsg; return(0); }//+------------------------------------------------------------------+ .....Получу я в переменной
pBuf нужную мне shared - строку ? Впрочем, напишу сейчас второй процесс и все прояснится.
Первый пост был мною воспринят как вопрос по написанию собственной DLL. Если же говорить о вызове API функций, то нужно пробовать.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если DLL-функция возвращает указатель на строку,
могу я при импорте определить ее прототип как:
string dllfunction(...),
а потом в теле MQL-программы написать:
string pBuf = dllfunction(...);
??????????????????