Вверх ↑
Ответов: 176
Рейтинг: 12
#1: 2011-09-07 15:46:57 ЛС | профиль | цитата
Наконец-то вопрос решился. Вот код рабочей dll

#cpp
#include "stdafx.h"

#define MT4_EXPFUNC __declspec(dllexport)

using namespace std;

// Создаем разделяемую секцию.
#pragma data_seg(".shared")
#pragma comment(linker,"/SECTION:.shared,RWS")
#pragma data_seg()

// Максимальная длина строки, в символах.
int const MaxStringLength = 65535;

/* Статическая проверка (опционально)

static_assert(0 != MaxStringLength, "MaxStringLength cannot be 0.");

*/

// Выделяем буфер в разделяемой секции и заполняем его нулями.
// В буфере должно быть место для строки и завершающего нуля.
__declspec(allocate(".shared")) char SharedStrVar1[MaxStringLength + 1] = {0};
__declspec(allocate(".shared")) char SharedStrVar2[MaxStringLength + 1] = {0};
__declspec(allocate(".shared")) char SharedStrVar3[MaxStringLength + 1] = {0};



// Функция записи строки в разделяемый буфер.
void __stdcall SharedStrVarSet(char* InStr, int i)
{
// Учитываем ситуацию с переполнением буфера.
if (MaxStringLength < lstrlenA(InStr))
{
return;
}
// Копируем строку в буфер.
switch(i)
{
case(0):
lstrcpyA(SharedStrVar1, InStr);
break;
case(1):
lstrcpyA(SharedStrVar2, InStr);
break;
case(2):
lstrcpyA(SharedStrVar3, InStr);
break;
}
}


// Функция чтения строки из разделяемого буфера.
char* __stdcall SharedStrVarGet(int i)
{
char* out;
switch(i)
{
case(0):
out = SharedStrVar1;
break;
case(1):
out = SharedStrVar2;
break;
case(2):
out = SharedStrVar3;
break;
}
return out;
}

карма: 0
Время верстки: %cr_time% Текущее время: %time%
1
файлы: 1code_25101.txt [1.8KB] [209]
Голосовали:Aziz