请问一下调用CreateProcess函数时,他那个BOOL类型的参数如何传递?
大家好,今天[{$WriteTime}]我在Delphi中调用CreateProcess函数时碰到一个问题.
在MSDN中CreateProcess的原型如下:
C/C++ codeBOOL CreateProcess(LPCTSTR lpApplicationName, // name of executable moduleLPTSTR lpCommandLine, // command line stringLPSECURITY_ATTRIBUTES lpProcessAttributes, // SDLPSECURITY_ATTRIBUTES lpThreadAttributes, // SDBOOL bInheritHandles, // handle inheritance optionDWORD dwCreationFlags, // creation flagsLPVOID lpEnvironment, // new environment blockLPCTSTR lpCurrentDirectory, // current directory nameLPSTARTUPINFO lpStartupInfo, // startup informationLPPROCESS_INFORMATION lpProcessInformation // process information);
可以看到他有一个BOOL类型的参数“BOOL bInheritHandles”,
我在调用时,对这一个参数直接或者间接传入True或者是False,
结果发现不管传入的是True还是False,效果(Effect)却都跟传入False一样.
请问一下是不是因为我对这一个BOOL类型的参数的传法搞错了呢?
向大家求教正确的方法,谢.
--
这一个是 继承 选择(Choose)---
句柄选项继承,是指的一些权限选项.如果父进程的权限相当大,那么可能在创建子进程的时候不希望他有那么大的权限,就会关闭该选项,然后使得子进程在默认的或者是指定所权限下执行.---
当然我是想问:
我用VC编了一个DLL,导出一个函数,代码为:
void _stdcall Test(BOOL bValue)
{
if(bValue)
MessageBox(NULL, "the parameter is True.", "Test", MB_OK);
else
MessageBox(NULL, "the parameter is False.", "Test", MB_OK);
}
然后我在delphi里调用,用以下语句声明这一个函数:
procedure Test(bValue: LongBool); stdcall; external 'DLL名' name 'Test';
接着这样调用:
Test(True);
结果弹出the parameter is False.
请问一下这是为何?太奇怪了.
---
引用 3 楼 huhu0013 的回复:
当然我是想问:
我用VC编了一个DLL,导出一个函数,代码为:
void _stdcall Test(BOOL bValue)
{
if(bValue)
MessageBox(NULL, "the parameter is True.", "Test", MB_OK);
else
MessageBox(NULL, "the parameter is False.", "Test", MB_OK);
}
然后我在delphi里调用,用以下语句声明这一个函数:
procedure Test(bValue: LongBool); stdcall; external 'DLL名' name 'Tes…
没您说的这问题.---
不怎么会吧,可是我老是出问题,郁闷~---
在C/C++当中,不等于0则表示为“真”,不然的话表示“假”,所以建议通过追踪寄存器,或者是通过单步执行来看看实际执行的代码.---
CPU Debug看见是0就是False,1就是True
您的Handle为可继承才有用的---
请问一下
快活林网友能介绍一下调试技术吗?
调试都有哪些方法?哪里有学习资料?
小弟弟我对调式程序(Procedures)(Procedures)还没任何经验.
谢.---
View->Debug Window->CPU Window