Първо, аз съм нов в 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;
}