小编alt*_*126的帖子

使用Web Worker中的可传输对象

我目前有这个代码来创建一个Web Worker:

w = new Worker("webwork.js");
w.onmessage = function(event) { alert(event.data); }
Run Code Online (Sandbox Code Playgroud)

然后是webwork.jsWeb Worker 的代码:

self.onmessage = function(event) {
    //var ss=r;  //Causes error because of undefined
    var ss="";
    for(var currProp in event) {
        ss+=("event."+currProp+"="+event[currProp]+"\n");
    }
    postMessage(ss);
}
Run Code Online (Sandbox Code Playgroud)

现在我想ArrayBuffer用这段代码传输128兆字节:

var r = new ArrayBuffer(1048576*128);
w.postMessage(0, [r]);
Run Code Online (Sandbox Code Playgroud)

既然我已经转移了变量r,我该如何从Web Worker本身访问它.我已经试过event.r,只是r,self.r和喜欢尝试添加第二个函数参数为数组其他东西ArrayBuffers,但没有任何工程.

如何从Web Worker访问传输的变量?

javascript web-worker transferable

27
推荐指数
2
解决办法
2万
查看次数

Visual Basic 6字节码规范

我在哪里可以找到官方和非官方Visual Basic 6规范的列表,这些规范可以让我完全解释VB6 EXE文件的内容并进行分析,或者单独解释它们而不是使用MSVBVM60.DLL

类似于虚拟机及其语言的规范.

诸如操作码,指令,助记符,是否使用一个或多个堆栈,堆栈指针,寄存器等等.

vb6 specifications bytecode vm-implementation

6
推荐指数
1
解决办法
935
查看次数

在JavaScript / Web浏览器中捕获2个或更多键盘的事件

我正在编写一些执行简单键盘事件捕获的测试应用程序。

我对这种基本方法没有任何疑问。

但是,现在我需要对我的应用程序有更好的体验,并且我想连接至少两个或多个USB或PS / 2键盘,区分哪个键盘是按键事件的来源,以便能够通过JavaScript在本地使用Web浏览器(和HTML5),就好像它是同时具有多个控制器的游戏控制台。

我知道即使在Windows或Linux下,正常的行为是使多个键盘触发相同的事件。但是,我也知道,完全有可能知道触发该事件的特定键盘硬件设备。

JavaScript是否可能或有限制?将来可能会支持同一基本类型的多个输入设备的区别,是否有其他选择(至少使用HTML5),或者在使用Web浏览器JavaScript的情况下几乎失去了希望和HTML5?

javascript keyboard-events

5
推荐指数
1
解决办法
819
查看次数

汇编程序:获取Win32的WinMain on-stack参数

我需要WinMain使用程序集访问参数,但我似乎无法这样做,尽管我应该知道它们在堆栈中的位置(DWORD在操作之前按下EBP时偏移0到16和0到20).下面是一个显示lpszCmdline包含程序命令行的字符串的示例,但它似乎总是包含0,因此不显示任何内容.如果我尝试在汇编代码中使用其他参数,则似乎不存在有效的字符串指针和/或程序崩溃,如预期的那样.


;[esp+20]==nCmdShow
;[esp+16]==lpszCmdLine
;[esp+12]==0 in win32
;[esp+8]==hInst
;[esp+4]==EIP
;[esp+0]==EBP

push ebp
mov ebp,esp
mov eax,[ebp+16]
    push dword 0x00001030              ;UINT uType
    push eax                           ;LPCTSTR lpCaption
    push eax                           ;LPCTSTR lpText
    push dword 0                       ;HWND hWnd
    call dword[MessageBoxA@USER32.DLL]
pop ebp
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用,GetCommandLine我可以获得指向命令行字符串的有效指针,并显示它.


call dword[GetCommandLineA@KERNEL32.DLL]
   push dword 0x00001030              ;UINT uType
   push eax                           ;LPCTSTR lpCaption
   push eax                           ;LPCTSTR lpText
   push dword 0                       ;HWND hWnd
   call dword[MessageBoxA@USER32.DLL]
Run Code Online (Sandbox Code Playgroud)

第一个代码块中的错误在哪里?我需要什么来获取参数,并能够实现我自己的代码以返回一个有效的指针,lpszCmdLine就像GetCommandLine其他WinMain参数一样?如果我无法从堆栈中获取命令行指针,那么我可能无法获得其他参数,例如nCmdShow,用于其他重要的初始化.

如果您需要的代码多于上面提供的代码,请与我们联系.如果你知道它是有用的,我没有使用链接器,而是完全手动EXE生成(它有什么 …

parameters assembly winapi winmain

4
推荐指数
1
解决办法
844
查看次数

寻找C/C++语言和标准库规范

可能重复:
我在哪里可以找到当前的C或C++标准文档?

我有几本C书,其中一本是C by Discovery,很好地解释了这门语言.但到目前为止,我似乎无法完整地找到完整的C/C++语言和库标准以及函数,类型等列表.

C99的完全标准在哪里以及C语言标准,C++语言标准及其库中较旧的,通常更常用和可接受的标准?

是否有一些我必须支付的费用,或者我应该遵循像GCC那样的维基百科和文档?

我还应该去哪里下载或完全获取它们?

c c++ specifications

3
推荐指数
1
解决办法
1977
查看次数

x86中值为0的奇偶校验标志

我看到在x86 CPU中,当设置为1的位数是偶数时,奇偶校验标志(PF)被设置,并且只测试一个值的第一个字节(低8位).

我不确定的唯一情况是当我们处理值为0时.

我至少看到了其他问题,其中奇偶校验标志似乎设置为1,值为0.

例如,对于值8000h,低8位全部为0,并且奇偶校验标志被设置为1.

那么,我是否应该接受为0位设置为1,奇偶校验标志被启用,就像设置为1的偶数位一样?

x86 assembly parity

2
推荐指数
1
解决办法
4867
查看次数

覆盖PUSH和POP指令的x86 SS段(SS:SP,SS:ESP,SS:RSP)

我需要解释/模拟x86指令的PUSH和POP系列。

我目前的问题是:

可以push和pop指令接受段重载前缀,这样我可以推或弹出来ES:SPCS:SPDS:SPFS:SPGS:SP代替 SS:SP

x86 assembly callstack

1
推荐指数
1
解决办法
835
查看次数

在更改其值后释放C指针

我可以释放指针,例如:

unsigned char *string1=NULL;
string1=malloc(4096);
Run Code Online (Sandbox Code Playgroud)

改变它的价值之后:

*string1+=2;
Run Code Online (Sandbox Code Playgroud)

free(string1)在递增它之后可以识别相应的存储块以便释放(例如指向字符串的一部分),或者我是否需要保留原始指针值以用于释放目的?

例如,对于C语言中的Visual Basic 6函数LTrim的实现,我需要传递**字符串作为参数,但最后我将返回*string+=string_offset_pointer开始超出任何空格/制表符.

我想在这里我正在改变指针,所以如果我这样做,我将需要保留原始指针的副本以释放它.最好将非空白内容覆盖到字符串本身,然后用0终止它,以避免需要额外的指针副本来释放内存:

void LTrim(unsigned char **string)
{
 unsigned long string_length;
 unsigned long string_offset_pointer=0;


 if(*string==NULL)return;

 string_length=strlen(*string);
 if(string_length==0)return;


 while(string_offset_pointer<string_length)
 {
  if(
     *(*string+string_offset_pointer)!=' ' &&
     *(*string+string_offset_pointer)!='\t'
    )
  {
   break;
  }

  string_offset_pointer++;
 }


 *string+=string_offset_pointer;
}
Run Code Online (Sandbox Code Playgroud)

最好使函数用它的子字符串覆盖字符串,但不改变指针的实际值,以避免需要它的两个副本:

void LTrim(unsigned char **string)
{
 unsigned long string_length;
 unsigned long string_offset_pointer=0;
 unsigned long string_offset_rebase=0;


 if(*string==NULL)return;

 string_length=strlen(*string);
 if(string_length==0)return;


 //Detect the first leftmost non-blank
 //character:
 ///
  while(string_offset_pointer<string_length)
  {
   if(
      *(*string+string_offset_pointer)!=' ' &&
      *(*string+string_offset_pointer)!='\t'
     )
   {
    break;
   } …
Run Code Online (Sandbox Code Playgroud)

c pointers memory-leaks

1
推荐指数
2
解决办法
68
查看次数

是*相当于C中的[]?

编码:

char *argv[]
Run Code Online (Sandbox Code Playgroud)

会是这样的:

char **argv
Run Code Online (Sandbox Code Playgroud)

或者会:

char *string1;
int  *int_array;
Run Code Online (Sandbox Code Playgroud)

完全相同:

char string1[];
int  int_array[];
Run Code Online (Sandbox Code Playgroud)

c pointers

1
推荐指数
1
解决办法
192
查看次数