gpt4 book ai didi

C++ 访问冲突写入 mql4 中的 dll 中的 0x00000000

转载 作者:太空狗 更新时间:2023-10-29 21:18:11 26 4
gpt4 key购买 nike

首先,我是 C++ 的新手(学习了将近一周),所以如果这很明显,请原谅我。另外,我已经搜索了许多具有类似问题的帖子。要么我的理解不够深入,要么没有相关信息可以帮助我理解这个问题。

在 Metatrader 4 中,我试图找出如何将结构变量传递给 dll,并修改存储在所述结构中的变量。到目前为止,即使在处理结构数组时,我也取得了巨大的成功。然后我遇到了一个问题。

我已将问题缩小到字符串的使用。如果愿意,请查看下面的代码,我用它来专注于解决这个问题,并帮助我理解为什么每当我尝试在 mt4 中运行脚本时,我总是收到这个“访问冲突写入 0x00000000”错误.

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;
}

最佳答案

来自 mql4 的文档:http://docs.mql4.com/basis/preprosessor/import

The following can't be used for parameters in imported functions:

  • pointers (*);
  • links to objects that contain dynamic arrays and/or pointers.

Classes, string arrays or complex objects that contain strings and/or dynamic arrays of any types cannot be passed as a parameter to functions imported from DLL.

导入的函数接受一个指针,而这显然不受 mql4 的支持。

您可能应该使用固定大小的字符数组来将数据传入和传出 dll:

喜欢:

struct Naming {
char m_name[255];
}

该函数需要接受对该结构的引用(但这可能也不被支持)或直接接受该结构并返回该结构。

Naming NameTest(Naming name) {

strncpy(name.m_name, "New Content", sizeof(name.m_name) -1);
if (sizeof(name.m_name) > 0) {
name.m_name[sizeof(name)-1] = 0;
}
return name;
}

调用它看起来像这样:

name = NameTest(name);

关于C++ 访问冲突写入 mql4 中的 dll 中的 0x00000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com