sss啥 发表于 2022-6-6 09:22:34

上个帖子没截图,易语言这个API 为何转换会出现参数错误?

麻烦管理删除上个帖子。没有截图火山,无法知道错误,这个帖子重新发布下

易语言:
CreateProcessAsUserA (0, road, 命令行, 0, 0, 0, 524288, 0, start, si, pi)

.版本 2
.DLL命令 CreateProcessAsUserA, 逻辑型, "advapi32.dll", "CreateProcessAsUserA"
    .参数 hToken, 整数型, , 0
    .参数 lpApplicationName, 文本型, , 0
    .参数 lpCommandLine, 文本型, , 0
    .参数 lpProcessAttributes, 整数型, , 0
    .参数 lpThreadAttributes, 整数型, , 0
    .参数 bInheritHandles, 整数型, , 0
    .参数 dwCreationFlags, 整数型, , 0
    .参数 lpEnvironment, 整数型, , 0
    .参数 lpCurrentDirectory, 文本型, , 0
    .参数 lpStartupInfo, STARTUPINFOEX, , 0
    .参数 lpProcessInformation, PROCESS_INFORMATION, , 0

这样没有任何问题。测试了用。

C++中:

EXTENDED_STARTUPINFO_PRESENT也就是易语言的第七个参数524288,测试也没问题

这样也没问题。

在火山中截图:


其中第七个参数如果改为EXTENDED_STARTUPINFO_PRESENT也就二十524288 那么下面的lpStartupInfo这个参数必须为STARTUPINFOEX结构体






结果发现在火山中调用:
创建进程_新 (0, 0, 取字节集指针 (文本到字节集 (命令行)), 0, 0, 假, 524288, 0, 0, si, pi)

出现参数错误。

如果把524288改为0,就可以创建,没有问题,一切正常。但为啥改为524288就出现参数错误,我需要524288也就是API中第七个参数调用EXTENDED_STARTUPINFO_PRESENT

这个 参数在C++ release X64平台测试和易语言X86测试都没任何问题。
请求管理能指导,或者帮忙写一个。

Xelloss0618 发表于 2022-6-6 10:15:03

参数 dwCreationFlags 用整数,其他看不出问题
另外就是使用之前,需要先对 si 这个变量赋值:
si.StartupInfo.cb = 取结构数据尺寸 (STARTUPINFOEX)

sss啥 发表于 2022-6-6 16:45:42

Xelloss0618 发表于 2022-6-6 10:15
参数 dwCreationFlags 用整数,其他看不出问题
另外就是使用之前,需要先对 si 这个变量赋值:
si.StartupI ...

已经按照你说的用整数了。si.StartupInfo.cb = 取结构数据尺寸 (STARTUPINFOEX) 这个我之前已经用上,但现在改为整数 还是显示参数错误,只能将524288改为0才可以运行,大佬,请求帮忙调试下这个API

sss啥 发表于 2022-6-6 17:01:19

@飞翔的企鹅 @创世魂 管理们

Xelloss0618 发表于 2022-6-6 17:41:17

sss啥 发表于 2022-6-6 16:45
已经按照你说的用整数了。si.StartupInfo.cb = 取结构数据尺寸 (STARTUPINFOEX) 这个我之前已经用上,但 ...

我之前是测试过了能成功执行,不过刚才也发现了命令行参数的一个坑
文本到字节集并没有加上结束0字符,所以也是错的。
其实也可以直接用取文本指针,不过需要给一个文本型变量。

我直接把文件传上来吧

sss啥 发表于 2022-6-6 19:58:00

Xelloss0618 发表于 2022-6-6 17:41
我之前是测试过了能成功执行,不过刚才也发现了命令行参数的一个坑
文本到字节集并没有加上结束0字符,所 ...

您好,大佬,我这免费版没有取结构数据尺寸 只有取数据类型尺寸 我用的易语言的cb=68 应该也一样吧

Xelloss0618 发表于 2022-6-6 20:04:39

sss啥 发表于 2022-6-6 19:58
您好,大佬,我这免费版没有取结构数据尺寸 只有取数据类型尺寸 我用的易语言的cb=68 应该也一样吧 ...

好家伙,没有这个命令的是很老的火山了,个人版和免费版能用的命令是完全一样的,去官方下载最新版吧
结构体在32位和64位的长度不一样

sss啥 发表于 2022-6-6 21:09:00

Xelloss0618 发表于 2022-6-6 20:04
好家伙,没有这个命令的是很老的火山了,个人版和免费版能用的命令是完全一样的,去官方下载最新版吧
结 ...

谢谢大佬 解决了。

xuezhq 发表于 2022-6-8 17:59:32

sss啥 发表于 2022-6-6 21:09
谢谢大佬 解决了。

共享一下代码吧,借鉴一下

sss啥 发表于 2022-6-12 13:45:08

xuezhq 发表于 2022-6-8 17:59
共享一下代码吧,借鉴一下

就直接用的上面那个大佬提供的代码就解决了
页: [1]
查看完整版本: 上个帖子没截图,易语言这个API 为何转换会出现参数错误?