资料库: 无需 DLL 的文件映射 - 页 6

 
TheXpert:
标准就是标准,所以没什么好说的,没办法。有错误 -- 向开发人员报告。别无他法。

在标准圣经中,调用的是GetLastError

但应该是这样的 ::GetLastError。

否则, kernel32::GetLastError 就是一个错误。

如何不纠正它?

 
Urain:

怎么能不纠正呢?

我暗示过,也展示过,还写过。

#import

intGetLastError(int )

---

就是这样,上下文是自由的。

如果你不想这样做,RtlGetLastError 也很类似。

 
sergeev:

我暗示过,我展示过,我写过。

#import

int GetLastError(int )

---

就是这样,上下文是自由的。

如果你不想这样做,RtlGetLastError 也很类似。

是的,我从一开始就明白了提示的意思,只有 MQ 开发人员才会关注我们,否则他们就不会为任何人编写代码,然后人们就会遭殃。
 
sergeev:

您不想这样做吗 - RtlGetLastError - 类似

RtlGetLastWin32Error?不相似,您必须自己手动重置错误
 
在我的代码中应用您的类时,我遇到了以下问题:如果共享内存的大小大于 4096 字节,CMemMapApi::Write/Read(memmaplib.mqh 中的第 219 和 231 行)中的memcpyX 就会显示 "访问违规"。能否告诉我 "从哪里挖掘 "来 "使 "memcpy 读取大于 4kb 的内存块?
[删除]  

非常感谢作者所做的工作。如果作者不介意,我将在我的 SCL 类库中加入这两个类。

不过,这两个类在定义标准微软类型方面存在错误,导致算法中出现其他错误。例如,DWORD 类型不是 int,而是 uint。因此,我不得不修改类中的一些算法,但这并不难。

 

_Konstantin_:

例如,DWORD 类型不是 int,而是 uint。

这就足以调用
[删除]  
sergeev:
这对调用来说就足够了。
如果按照微软的说法,在以 DWORD < 0 为条件的方法中,会出现警告,因为 DWORD 不能小于 0。总的来说,我喜欢这两个类:)
 
我不太明白线程安全是如何实现的?假设:几个进程同时写入和读取。从逻辑上讲,应该有类似 Lockfile 的东西,但我在 lib 中没有找到。还是在 winapi 层已经实现了?
 
Al_key:
我不太明白线程安全是如何实现的?假设:几个进程同时写入和读取。从逻辑上讲,应该有类似 Lockfile 的东西,但我在 lib 中没有找到。还是在 winapi 层已经实现了?

lib 中没有章节绑定,因为理论上代码可以在不同进程中执行。

要控制它,可以使用您的变量或https://www.mql5.com/zh/code/1835。

Mutex - на чистом WinAPI
Mutex - на чистом WinAPI
  • 投票: 29
  • 2013.08.20
  • o_O
  • www.mql5.com
Синхронизируем процессы ОС/EA/MT и т.д. Никаких самописных DLL. Настало время держать все под своим контролем!