Websocket如何? - 页 27

 
Aleksei Beliakov:

1.你没有那么多工作,我理解,别担心。

2.合理 结论是把结果(所有的工作和mql4也是)贴在这里给大家看 ,这会提高论坛的整体水平,也许会有更多的人有工作,更少的人告诉陌生人 该怎么做。

这个问题尚未解决,但真正的问题是如何做到这一点。

 
Aleksei Beliakov:

1.你没有那么多工作,我理解,别担心。

2.合理 结论是把结果(所有的mql4工作也是)贴在这里给大家看 ,这将从整体上提高论坛用户的水平,也许会有更多的人有工作,更少的人告诉陌生人该怎么做

我支持你,同声追问。对我这个不识字的自学者来说,看到一步步的每个动作,特别是有解释,是很有意思的。而这里在最后的差异后,开始了混乱,最后一切都被纠正和完成,但没有详细的步骤,以及如何。所以事实证明,自学开始重复/理解,在不一致的时候仍然在自由浮动,不明白接下来该做什么。 我同意你可以在互联网上搜索半天来自己完成它,但既然它是一个很好的开始,为什么不以同样的方式完成它。需要的不是代码本身,而只是一个合格的解释,如何把它带到一个合理的结局。

 

你好

这个项目是免费提供的还是付费项目?是否有关于如何自己实施的手册?

我对通过websocket从另一个供应商那里实时导入 报价感兴趣。


如果我们一切都按图索骥,我不明白报价单的导入和输出过程。我不认为这个问题已经被涵盖了

 

我只是想发起这个话题。 我曾问过一个关于C#的问题,但我没有找到。 也许有人会来帮助我;)


底线:我用C#语言包装了MQL5库,从MQL4中调用它,一切正常。

但它只起作用一次--在EA卸载之前,在MT4中的第二次运行将导致一个错误

Unhandled exception 0xE0434352

通过论坛搜索,只在这里https://www.mql5.com/ru/forum/35807

情况很混乱,关闭图表和打开图表放弃EA并不能解决问题,只有重新加载MT4才有帮助。

我关闭了.dll中的所有线程,但在任务管理器中卸载时,进程(当dll被调用时出现)被关闭了


我不知道在哪里可以找到它,在MQL5中,它像时钟一样工作。

 
Igor Makanu:

我只是想发起这个话题。 我曾问过一个关于C#的问题,但我没有找到。 也许有人会来帮助我;)


底线:我用C#语言包装了MQL5库,从MQL4中调用它,一切正常。

但它只起作用一次--在EA卸载之前,在MT4中的第二次运行将导致一个错误

通过论坛搜索,只在这里https://www.mql5.com/ru/forum/35807

情况很混乱,关闭图表和打开图表放弃EA并不能解决问题,只有重新加载MT4才有帮助。

我关闭了.dll中的所有线程,但在任务管理器中卸载时,进程(当dll被调用时出现)被关闭了


我不知道在哪里可以找到它,在MQL5中,它像时钟一样工作。


似乎提出了一个异常,在代码中加入try-catch
 
Fedor Arkhipov:


必须有一个例外,在代码中加入try-catch

问题是在MQL4中,我的代码99%是相同的。

也许我用来进行本地调用的Robert Giesecke模板不能处理它,或者是终端留下了一些资源。

我不知道该从哪里开始找 (

 
Igor Makanu:

问题是在MQL4中,我的代码99%是相同的。

也许我用来进行本地调用的Robert Giesecke模板不能处理它,或者是终端留下了一些资源。

我不知道从哪里开始寻找它(()。

并非所有的DLLs都是可重入的。这个术语不太正确,但简而言之--在加载-卸载之后,下一次加载将导致未定义行为。

改变进程内存或特定线程中的东西。DLL的适应性一般都很强--加载就走,不需要来回滚动 :-)

但当然也有变通的办法,你可以阻止DLL卸载,如果它被需要一次,那么就让它留在内存中。

有一个链接到源头,其中一个食谱。

/* ----------------------------------------------------- */
/* предотвратить выгрузку DLL из памяти !! (без этого глючит)
/* copy-paste из https://blogs.msmvps.com/vandooren/2006/10/09/preventing-a-dll-from-being-unloaded-by-the-app-that-uses-it/
/* ----------------------------------------------------- */
HMODULE g_Self;
int LockLibraryIntoProcessMem(

HMODULE DllHandle,

HMODULE *LocalDllHandle)

{

  if(NULL == LocalDllHandle)

    return ERROR_INVALID_PARAMETER;

 

  *LocalDllHandle = NULL;

  TCHAR moduleName[1024];

  if(0 == GetModuleFileName(

DllHandle,

moduleName,

sizeof(moduleName)/ sizeof(TCHAR)))

    return GetLastError();

  *LocalDllHandle = LoadLibrary(moduleName);

  if(NULL == *LocalDllHandle)

    return GetLastError();

  return NO_ERROR;

}
BOOL APIENTRY DllMain( HMODULE hModule,
                      DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                               )
{

  switch(ul_reason_for_call)

  {

  case DLL_PROCESS_ATTACH:
        //      WriteLog("Attach");
    LockLibraryIntoProcessMem(hModule, &g_Self);

    break;

  case DLL_PROCESS_DETACH:
        //      WriteLog("Detach");

    break;

  }

    return TRUE;

}

关于格式化 "被杀 "的事情 :-(

 
Maxim Kuznetsov:

上传就走,没有什么可来回滚动的:-)

我没有特别的选择,我不会再追求完美了,我有一个强烈的愿望,就是让所有的东西在5和4中都能正常工作,没有bug,而不是从头开始重写代码 ))))

谢谢你的信息,它是有价值的

 

这似乎是很久以前的事了...似乎...

卸载动态加载库程序需要特殊技能。在MQL5和MQl4中,只有Metaquotes有这种技能,因为只有他们能接触到环境中作业管理语言的秘密。而在JCL,我本来是跪着做的。