我目前有这个代码来创建一个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访问传输的变量?
我在哪里可以找到官方和非官方Visual Basic 6规范的列表,这些规范可以让我完全解释VB6 EXE文件的内容并进行分析,或者单独解释它们而不是使用MSVBVM60.DLL?
类似于虚拟机及其语言的规范.
诸如操作码,指令,助记符,是否使用一个或多个堆栈,堆栈指针,寄存器等等.
我正在编写一些执行简单键盘事件捕获的测试应用程序。
我对这种基本方法没有任何疑问。
但是,现在我需要对我的应用程序有更好的体验,并且我想连接至少两个或多个USB或PS / 2键盘,区分哪个键盘是按键事件的来源,以便能够通过JavaScript在本地使用Web浏览器(和HTML5),就好像它是同时具有多个控制器的游戏控制台。
我知道即使在Windows或Linux下,正常的行为是使多个键盘触发相同的事件。但是,我也知道,完全有可能知道触发该事件的特定键盘硬件设备。
JavaScript是否可能或有限制?将来可能会支持同一基本类型的多个输入设备的区别,是否有其他选择(至少使用HTML5),或者在使用Web浏览器JavaScript的情况下几乎失去了希望和HTML5?
我需要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生成(它有什么 …
可能重复:
我在哪里可以找到当前的C或C++标准文档?
我有几本C书,其中一本是C by Discovery,很好地解释了这门语言.但到目前为止,我似乎无法完整地找到完整的C/C++语言和库标准以及函数,类型等列表.
C99的完全标准在哪里以及C语言标准,C++语言标准及其库中较旧的,通常更常用和可接受的标准?
是否有一些我必须支付的费用,或者我应该遵循像GCC那样的维基百科和文档?
我还应该去哪里下载或完全获取它们?
我看到在x86 CPU中,当设置为1的位数是偶数时,奇偶校验标志(PF)被设置,并且只测试一个值的第一个字节(低8位).
我不确定的唯一情况是当我们处理值为0时.
我至少看到了其他问题,其中奇偶校验标志似乎设置为1,值为0.
例如,对于值8000h,低8位全部为0,并且奇偶校验标志被设置为1.
那么,我是否应该接受为0位设置为1,奇偶校验标志被启用,就像设置为1的偶数位一样?
我需要解释/模拟x86指令的PUSH和POP系列。
我目前的问题是:
可以push和pop指令接受段重载前缀,这样我可以推或弹出来ES:SP,CS:SP,DS:SP,FS:SP或GS:SP代替 SS:SP?
我可以释放指针,例如:
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) 编码:
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) assembly ×3
c ×3
javascript ×2
pointers ×2
x86 ×2
bytecode ×1
c++ ×1
callstack ×1
memory-leaks ×1
parameters ×1
parity ×1
transferable ×1
vb6 ×1
web-worker ×1
winapi ×1
winmain ×1