我是D编程语言的新手,有一个非常简单的问题.
我想编译一个D脚本库,然后在我的其他D项目中使用它.
在链接到.lib文件并为它们创建标题的CI中,但在DI中找不到类似的东西(D中是否还有某种标题?)
我使用D-IDE作为我的IDE,使用DMD2作为我的编译器.
对于使用File作为某种公司设备预留的全局存储的应用程序,我需要一种方法来读取和写入文件(或锁定文件,从中读取,写入并解锁).一个小代码片段将拍摄我的意思:
FileStream in = new FileStream("storage.bin", FileMode.Open);
//read the file
in.Close();
//!!!!!
//here is the critical section since between reading and writing, there shouldnt
//be a way for another process to access and lock the file, but there is the chance
//because the in stream is closed
//!!!!!
FileStream out = new FileStream("storage.bin", FileMode.Create);
//write data to file
out.Close();
Run Code Online (Sandbox Code Playgroud)
这应该是这样的
LockFile("storage.bin");
//read from it...
//OVERwrite it....
UnlockFile("storage.bin");
Run Code Online (Sandbox Code Playgroud)
该方法应该是绝对安全的,因为程序应该同时在2000个设备上运行
我尝试通过将标签之间的C代码中的代码段复制到malloc分配的内存来"内联"我的VM.所以我用开始和结束标签定义了Ops,我想将以下代码定义的指令复制到缓冲区然后执行(我不确定这是否可行)
OP_PUSH0_START:
sp += 4; *sp = 0; // I WANT THE INSTRUCTIONS OF THIS LINE COPIED TO THE BUFFER
OP_PUSH0_END:
Run Code Online (Sandbox Code Playgroud)
这样做我认为以下代码片段将起作用
void * ptr0 = &&OP_PUSH0_START;
void * ptr1 = &&OP_PUSH0_END;
while(ptr0 < ptr1)
{
buf[c++] = *ptr0;
ptr0++;
}
goto buf; //jump to start of buffer
Run Code Online (Sandbox Code Playgroud)
但我不能在没有记忆错误的情况下阅读它
我会很高兴任何链接或任何建议如何实现这一点
我在D编程语言中使用内联汇编程序访问静态变量时遇到了一些麻烦.文档说我必须访问局部变量
mov EAX, var[EBP]; //or mov EAX, var;
Run Code Online (Sandbox Code Playgroud)
和类变量
mov EBX, this;
mov EAX, var[EBX];
Run Code Online (Sandbox Code Playgroud)
但它没有记录如何访问静态变量.这是我的代码抛出错误:
module test;
static int A = 1234;
static void SetA()
{
asm
{
mov A, 5432; //compiles, but throws an error
//tried it with "mov dword ptr [A], 5432; too
}
}
Run Code Online (Sandbox Code Playgroud)
对于可以从汇编程序和汇编程序访问的整数,我真的需要一种"全局存储"的方式,我会非常高兴有任何这方面的帮助(或替代方法).