Во-первых, я новичок в C++ (почти неделю в нем), так что простите меня, если это очевидно. Кроме того, я просмотрел множество сообщений с похожими проблемами. Либо мое понимание недостаточно развито, либо ни у кого не было соответствующей информации, которая помогла бы мне понять эту проблему.
В Metatrader 4 я пытаюсь понять, как передать структурную переменную в dll и изменить переменные, хранящиеся в указанной структуре. До сих пор я добился больших успехов, даже имея дело с массивами структур. Затем я столкнулся с проблемой.
Я сузил проблему до использования строк. Если хотите, взгляните на следующий код, который я использовал, чтобы сосредоточиться на решении этой проблемы, и помогите мне понять, почему я продолжаю получать эту ошибку «Нарушение прав доступа, запись в 0x00000000» всякий раз, когда я пытаюсь запустить скрипт в mt4. .
Код mql4:
struct Naming
{
string word;
} name;
#import "SampleDLLtest.dll"
bool NameTest(Naming &name);
#import
int init() { return(0); }
int start()
{
Print("original name: ", name.word);
if( NameTest( name ) )
{
Print("new name: ", name.word);
}
//---
return(0);
}
Это соответствующий код DLL:
#define WIN32_LEAN_AND_MEAN
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
//---
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
//---
return(TRUE);
}
struct Naming
{
std::string n_name;
};
bool __stdcall NameTest(Naming *name)
{
name->n_name = "Captain Success";
return true;
}