文档库 最新最全的文档下载
当前位置:文档库 › CreateProcess函数详细使用说明

CreateProcess函数详细使用说明

CreateProcess函数详细使用说明
CreateProcess函数详细使用说明

CreateProcess函数详细使用说明

函数原型BOOL CreateProcess

(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

L PS ECURITY_ATTRIBUTES lpProcessAttributes。

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles,

DWORD dwCreationFlags,

LPVOID lpEnvironment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATION lpProcessInformation

);

CreateProcess函数用于创建进程:

1.BOOL CreateProcess(

2.PCTSTR pszApplicationName,

3.PTSTR pszCommandLine,

4.PSECURITY_ATTRIBUTES psaProcess,

5.PSECURITY_ATTRIBUTES psaThread,

6.BOOL bInheritHandles,

7.DWORD fdwCreate,

8.PVOID pvEnvironment,

9.PCTSTR pszCurDir,

10.PSTARTUPINFO psiStartInfo,

11.PPROCESS_INFORMATION ppiProcInfo);

线程调用CreateProcess时,系统会创建一个进程内核对象,将其引用计

数初始化为1(进程内核对象并不是进程本身,它只是操作系统用来管理进程

的数据结构,其中包含了进程的一些统计信息)。然后系统为新进程开辟虚拟

地址空间,并将可执行文件的代码和数据以及所需的DLL装载到该地址空间中。接着系统为进程主线程创建线程内核对象,并将其引用计数初始为1(同进程

一样,线程内核对象也不是线程本身,而且操作系统用来管理线程的数据结构)。主线程将链接器设置的入口点函数作为C/C++运行时启动函数调用,这

些启动函数最终又调用代码中的入口点函数如WinMain、wWinMain、main和wmain。当操作系统成功创建了新的进程和主线程后,CreateProcess返回TRUE。以上是CreateProcess的简要介绍,下面我们来详细讨论它的参数。

pszApplicationName和pszCommandLine

pszApplicationName和pszCommandLine分别表示进程使用的可执行文件名和

向其传递的命令行字符串,我们先来看看 pszCommandLine参数。注意pszCommandLine是PTSTR,这意味着你必须为其传递指向非常量字符串的地址。CreateProcess内部会更改向其传递的命令行字符串,但在CreateProcess返

回之前,它会将该字符串恢复原样。这一点是非常重要的,因为如果你向CreateProcess传递的命令行字符串位于进程的只读存储区,就会发生Access Violation错误。比如,下面的代码执行时会触发Access Violation,因为微

软的C/C++编译器会把常量字符串放入只读存储区(注意早期的微软C/C++编译器会将常量字符串放在可读写存储区,因此下面的代码在旧的编译环境下不会

出错):

1.STARTUPINFO si = { sizeof(si) };

2.PROCESS_INFORMATION pi;

3.CreateProcess(NULL, TEXT("NOTEPAD"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

解决这个问题的方法很简单,将命令行字符串复制到临时缓冲区既可,如

下所示:

1.STARTUPINFO si = { sizeof(si) };

2.PROCESS_INFORMATION pi;

3.TCHAR szCommandLine[] = TEXT("NOTEPAD");

4.CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

微软在其C++编译器选项中提供了/GF开关,/GF打开时,程序中所有用到

的常量字符串将只维护单一副本,且位于只读存储部分。在调用

CreateProcess时,开发人员应该打开/GF开关并使用缓冲区。我们希望微软在未来版本的Windows中会改进CreateProcess,使其接受常量字符串作为命令

行参数,并在其内部分配/释放临时缓冲区而不是让API调用者来做。另外,假如你使用常量ANSI字符串作为 CreateProcess参数,并不会发生Access Violation错误,我们在前面的章节已经提到过,许多WinAPI函数的ANSI版

本会将ANSI参数转换为UNIDOE编码后调用其 Unicode版本,CreateProcess

会把ANSI字符串转换为Unicode编码后放在临时缓冲区,并调用Unicode版的CreateProcess,因此不会触发Access Violation。

pszCommandLine参数指定了 CreateProcess创建新进程所需的完整命令行。当CreateProcess解析该参数时,它会检查命令行参数中的第一个标记,并将其

作为进程要执行的可执行文件名,如果该文件名没有指定后缀,函数将把它当

作exe文件。CreateProcess会按下面的顺序查找该文件:

1. 包含当前进程可执行文件的目录

2. 当前进程的当前目录

3. Windows系统目录,既GetSystemDirectory返回的目录

4. Windows目录

5. PATH环境变量列出的目录

当然,如果文件名包含了完整路径,系统将会在该路径中查找文件而不会再做

上面的搜索。如果系统找到了可执行文件,它会创建一个新的进程并把可执行

文件的代码和数据映射到进程的地址空间,然后调用CRT启动函数(linker选

项卡中的入口点函数),接着CRT启动函数检查命令行参数,过滤掉其中的可

执行文件部分,并把剩下字符串的地址作为pszCmdLine传给

wWinMain/WinMain。

以上情形都是在pszApplicationName为NULL时发生的。pszApplicationName指定了进程要执行的可执行文件的名称,假如没有指定文

件后缀,系统并不会做任何处理。 pszApplicationName不包含完整路径时,CreateProcess只从当前目录中查找可执行文件,查找失败时函数失败并返回

FALSE。即使指定了pszApplicationName,CreateProcess仍然会将pszCommandLine参数作为新进程的命令行。比如下面的代码:

1.// Make sure that the path is in a read/write section of memory.

2.TCHAR szPath[] = TEXT("WORDPAD README.TXT");

3.// Spawn the new process.

4.CreateProcess(TEXT("C:\\WINDOWS\\SYSTEM32\\NOTEPAD.EXE"),szPath ,...);

执行上面代码时,系统会打开notepad.exe(记事本),但它的命令行却

是WORDPAD README.TXT(WORDPAD是写字板),这看上去非常奇怪,但CreateProcess就是这样工作的。这种 pszApplicationName提供的特性被用来

支持Windows的POSIX子系统。

psaProcess, psaThread和bInheritHandles

创建新进程时,系统会创建一个进程内核对象和一个线程内核对象(用于进程

的主线程),和其它内核对象一样,创建者(在这儿是父进程)必须指定其安

全属性。psaProcess和psaThread分别指定了新进程的进程内核对象和线程内

核对象的安全属性。将其设为NULL时,系统为对应的内核对象指定默认的安全

属性。你可以创建SECURITY_ATTRIBUTES类型的变量,设置其中各个域的值然

后将变量地址传递给psaProcess或 psaThread,以应用指定的安全属性。正如

在第3章讨论内核对象时谈到的,当你想要控制新的进内核对象的句柄能否被

父进程以后创建的子进程继承时,你应该设置SECURITY_ATTRIBUTES变量的bInheritHandle域的值。

下面的Inherit.cpp展示了内核对象句柄继承。假设执行该代码的进程为A,

它调用CreateProcess创建了进程B,接着又创建了子进程C。注意调用CreateProcess时A使用的psaProcess、psaThread和bInheritHandles参数,代码注释很详细的描述了这些参数的作用:

1./************************************************************

2.Module name: Inherit.cpp

3.Notices: Copyright (c) 2008 Jeffrey Richter & Christophe

Nasarre

4.************************************************************/

5.#include

6.int WINAPI _tWinMain (HINSTANCE hInstanceExe, HINSTANCE,

7.PTSTR pszCmdLine, int nCmdShow) {

8.// Prepare a STARTUPINFO structure for spawning processes.

9.STARTUPINFO si = { sizeof(si) };

10.SECURITY_ATTRIBUTES saProcess, saThread;

11.PROCESS_INFORMATION piProcessB, piProcessC;

12.TCHAR szPath[MAX_PATH];

13.// Prepare to spawn Process B from Process A.

14.// The handle identifying the new process

15.// object should be inheritable.

16.saProcess.nLength = sizeof(saProcess);

17.saProcess.lpSecurityDescriptor = NULL;

18.saProcess.bInheritHandle = TRUE;

19.// The handle identifying the new thread

20.// object should NOT be inheritable.

21.saThread.nLength = sizeof(saThread);

22.saThread.lpSecurityDescriptor = NULL;

23.saThread.bInheritHandle = FALSE; // Spawn Process B.

24._tcscpy_s(szPath, _countof(szPath), TEXT("ProcessB"));

25.CreateProcess(NULL, szPath, &saProcess, &saThread,

26.FALSE, 0, NULL, NULL, &si, &piProcessB);

27.// The pi structure contains two handles

28.// relative to Process A:

29.// hProcess, which identifies Process B's process

30.// object and is inheritable;and hThread,which identifies

31.// Process B's primary thread object and is NOT inheritable.

32.// Prepare to spawn Process C from Process A.

33.// Since NULL is passed for the psaProcess and psaThread

34.// parameters, the handles to Process C's process and

35.// primary thread objects default to "noninheritable."

36.// If Process A were to spawn another process, this new

37.//process would NOT inherit handles to Process C's

process

38.// and thread objects.

39.// Because TRUE is passed for the bInheritHandles parameter,

40.// Process C will inherit the handle that identifies Process

41.// B's process object but will not inherit a handle to

42.// Process B's primary thread object.

43._tcscpy_s(szPath, _countof(szPath), TEXT("ProcessC"));

44.CreateProcess(NULL, szPath, NULL, NULL,

45.TRUE, 0, NULL, NULL, &si, &piProcessC);

46.return(0);

47.}

fdwCreate

fdwCreate参数用来控制进程被创建时的行为,下面列出了它可能的取值:·DEBUG_PROCESS:父进程将调试子进程及子进程创建的所有进程,指定该参数后,在子进程或子进程创建的任意进程中发生特定事件时系统将通知父进程·DEBUG_ONLY_THIS_PROCESS:父进程将调试子进程,指定该参数后,在子进程中发生特定事件时系统将通知父进程

·CREATE_SUSPENDED:进程创建后其主线程暂不执行。此时父进程可以在子进

程运行之前更改子进程地址空间中的数据、更改子进程主线程优先级、将子进

程添加到作业中等。父进程完成其更改后,可以调用ResumeThread函数恢复子进程主线程运行

·DETACHED_PROCESS:系统将阻止CUI程序向其父进程的CUI窗口写入其输出。

当父进程为CUI进程时,创建的CUI子进程默认使用父进程的CUI窗口(如cmd.exe程序)。指定该参数后,新进程在需要输出到窗口时必须调用AllocConsole创建CUI窗口

·CREATE_NEW_CONSOLE:系统自动为新进程创建一个CUI窗口,该标志不能与DETACHED_PROCESS同时使用

·CREATE_NO_WINDOW:系统不为新进程创建CUI窗口,使用该标志可以创建不

含窗口的CUI程序

·CREATE_NEW_PROCESS_GROUP:新进程将作为一个新的进程组的根进程,新的

进程组将包含以根进程为祖先的所有进程。用户在进程组中的某个进程CUI窗

口中按下Ctrl+C或Ctrl+B时,系统将通知进程组中的所有进程这一事件·CREATE_DEFAULT_ERROR_MODE:子进程不继承父进程的任何错误标志·CREATE_SEPARATE_WOW_VDM:仅用于16位Windows程序,不译

·CREATE_SHARED_WOW_VDM:仅用于16位Windows程序,不译

·CRE ATE_UNICODE_ENVIRONMENT:子进程的环境块为Unicode字符串。进程的

环境块默认只包含ANSI字符串

·CREATE_FORCEDOS:强制系统运行内嵌在16位OS/2系统中的MS-DOS程序·CREATE_BREAKAWAY_FROM_JOB:当父进程属于某个作业时,新建的子进程将不再与该作业关联

·EXTENDED_STARTUPINFO_PRESENT:传递给CreateProcess函数的

psiStartInfo参数是STARTUPINFOEX类型的变量

fdwCreate参数也可以用于设置新进程的优先级。但你不必这样做,对大多数

应用你也不应该这样做——系统会为新进程分配默认优先级。表4-5列出了可

能的优先级常量:

这些常量决定了进程中的线程在CPU中调度的优先级,我们在188页的“优先

级概述”中会讨论该问题。

pvEnvironment

参数pvEnvironment指向一块内存区域,其中包含新进程用到的环境字符串。

大多数情况下,你可以为其传递NULL,此时新进程将继承父进程的环境字符串。

pszCurDir

参数pszCurDir允许父进程设置子进程的当前驱动器和目录。如果该参数为NULL,子进程将使用父进程的当前驱动器和目录作为其当前驱动器和目录。如

果pszCurDir非空,则其必须指向一个包含驱动器标识的以0结尾的路径字符串。

psiStartInfo

psiStartInfo是指向STARTUPINFO或STARTUPINFOEX变量的提针:

1.typedef struct _STARTUPINFO {

2. DWORD cb;

3. PSTR lpReserved;

4. PSTR lpDesktop;

5. PSTR lpTitle;

6. DWORD dwX;

7. DWORD dwY;

8. DWORD dwXSize;

9. DWORD dwYSize;

10. DWORD dwXCountChars;

11. DWORD dwYCountChars;

12. DWORD dwFillAttribute;

13. DWORD dwFlags;

14. WORD wShowWindow;

15. WORD cbReserved2;

16. PBYTE lpReserved2;

17. HANDLE hStdInput;

18. HANDLE hStdOutput;

19. HANDLE hStdError;

20.} STARTUPINFO, *LPSTARTUPINFO;

21.

22.typedef struct _STARTUPINFOEX {

23. STARTUPINFO StartupInfo;

24. struct _PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;

25.} STARTUPINFOEX, *LPSTARTUPINFOEX;

Windows创建新进程时会使用STARTUPINFO(EX)的成员变量,大多数情况下可以使用这些变量的默认值,此时你应该该将其cb域设置为结构的大小,并将其余域清0,如下:

1.STARTUPINFO si = { sizeof(si) };

2.CreateProcess(..., &si, ...);

许多开发人员常常会忘记执行上述操作,如果你没有清空其内容,STARTUPINFO(EX)的内容会是调用线程堆栈上的一些数据。将这些垃圾数据传递给CreateProcess可能导致无法预料的结果,为了让CreateProcess正常工作,你必须将STARTUPINFO(EX)中没有用到的域清0。表4-6列出了

STARTUPINFO(EX)结构的成员,注意有些成员只在GUI应用中生效,而有些则只在CUI应用中生效:

现在我们来讨论dwFlags成员。dwFlags包含一组标志用来指示如何创建子进程,其中大多数标志只是告诉CreateProcess是否使用STARTUPINFO结构中的某个成员,表4-7列出了dwFlags的可取值:

现在我们来讨论dwFlags成员。dwFlags包含一组标志用来指示如何创建子进程,其中大多数标志只是告诉CreateProcess是否使用STARTUPINFO结构中的某个成员,表4-7列出了dwFlags的可取值:

另外两个标志 STARTF_FORCEONFEEDBACK和STARTF_FORCEOFFFEEDBACK可以控制在创建子进程时如何显示鼠标指针。由于 Windows支持抢先式多任务调度,因此你可以在创建子程并等待子进程初始化时,执行另外的程序。如果你指定了 STARTF_FORCEONFEEDBACK,Windows会在新进程初始化时将鼠标光标指针更改为“后台运行”,如下图:

这个标志意味着系统后台正在处理某些任务(在这里是创建并初始化子进程),但你依然可以继续使用系统。当你指定了STARTF_FORCEOFFFEEDBACK标志时,CreateProcess不会更改鼠标指针样式。

如果指定了STARTF_FORCEONFEEDBACK,且子进程在CreateProcess调用后2秒内执行了GUI调用,CreateProcess会等待子进程显示窗口。如果该GUI调用

后5秒之内还没有窗口显示,CreateProcess会将鼠标指针恢复原状,否则继

续等待5秒,如果在这5秒之内子进程调用了GetMessage函数,CreateProcess会认为子进程已经完成初始化并将鼠标指针复位。STARTUPINFO的wShowWindow变量将传递给wWinMain/WinMain的最后一个参数nCmdShow,它的取值是 ShowWindow函数接受的参数值之一,通常被指定为

SW_SHOWNORMAL、SW_SHOWMINNOACTIVE或 SW_SHOWDEFAULT。

在结束本节之前,我们来看看STARTUPINFOEX结构。通过使用同时兼容STARTUPINFOEX和STARTUPINFO结构的参数psiStartInfo,微软在保持CreateProcess签名的同时提高了其扩展性。下面是STARTUPINFOEX结构的定义:

1.typedef struct _STARTUPINFOEXA {

2. STARTUPINFOA StartupInfo;

3. struct _PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;

4.} STARTUPINFOEXA, *LPSTARTUPINFOEXA;

5.typedef struct _STARTUPINFOEXW {

6. STARTUPINFOW StartupInfo;

7. struct _PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;

8.} STARTUPINFOEXW, *LPSTARTUPINFOEXW;

lpAttributeList(属性链表)是_PROC_THREAD_ATTRIBUTE_LIST结构的链表,其中每个结构包含一个key/value对,目前,_PROC_THREAD_ATTRIBUTE_LIST

中key的取值只能是下面两种:

?PROC_THREAD_ATTRIBUTE_HANDLE_LIST:告诉 CreateProcess指定的句

柄可被子进程继承,当然该句柄必须是可继承的(其继承标志位为1),且无

需将CreateProcess的 bInheritHandles参数设置为TRUE。使用该标志可以指定子进程继承可继承句柄的子集而不是全部。这对于需要在不同的安全环境中

创建子进程的进程而言非常重要,在这种情况下,由于安全原因,某些子进程

可能不应该继承全部的可继承句柄。

?PROC_THREAD_ATTRIBUTE_PARENT_PROCESS:指定一个进程句柄,指定的

进程(包括其可继承句柄、亲缘性、优先级等等)会替代调用CreateProcess

的当前进程,成为子进程的父进程。如果当前进程在调用CreateProcess时指

定了DEBUG_PROCESS或DEBUG_ONLY_THIS_PROCESS,重新指定父进程并不影响

原父进程调试过程,在子进程中发生的特定事件仍然会报告给原父进程。

属性链表的内容是不透明的,因此我们需要一些函数来创建空的属性链表。创建属性链表需要以下几个步骤,首先,为其分配存储空间,然后向其中添加

键值对。函数InitializeProcThreadAttributeList用来创建新的属性链表并

为其分配存储空间:

1.BOOL InitializeProcThreadAttributeList(

2. PPROC_THREAD_ATTRIBUTE_LIST pAttributeList,

3. DWORD dwAttributeCount,

4. DWORD dwFlags,

5. PSIZE_T pSize);

参数dwFlags必须指定为0,你可以先用如下方式获得属性链表所需的空

间大小:

1.SIZE_T cbAttributeListSize = 0;

2.BOOL bReturn = InitializeProcThreadAttributeList(

3. NULL, 1, 0, &cbAttributeListSize);

4.// bReturn is FALSE but GetLastError() returns

ERROR_INSUFFICIENT_BUFFER

cbAttributeListSize 返回创建属性链表所需的内存大小,该大小与dwAttributeCount参数相关,dwAttributeCount指定了属性链表中的

key/value对的数目。接下来你可以用cbAttributeListSize为属性链表分配空间:

1.pAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)

2. HeapAlloc(GetProcessHeap(), 0, cbAttributeListSize);

然后再次调用InitializeProcThreadAttributeList初始化属性链表的内容:

1.bReturn = InitializeProcThreadAttributeList(

2. pAttributeList, 1, 0, &cbAttributeListSize);

当属性链表初始化完成后,就可以调用UpdateProcThreadAttribute向其添加键/值对了:

1.BOOL UpdateProcThreadAttribute(

2. PPROC_THREAD_ATTRIBUTE_LIST pAttributeList,

3. DWORD dwFlags,

4. DWORD_PTR Attribute,

5. PVOID pValue,

6. SIZE_T cbSize,

7. PVOID pPreviousValue,

8. PSIZE_T pReturnSize);

pAttributeList是要添加键/值对的属性列表,Attribute可取

PROC_THREAD_ATTRIBUTE_PARENT_PROCESS或

PROC_THREAD_ATTRIBUTE_HANDLE_LIST,取前者时,pValue参数应指向另外一个进程的句柄,cbSize取值应为sizeof(HANDLE),否则,pValue指向子进程要继承的所有内核对象的句柄数组,cbSize取值应是sizeof(HANDLE)乘以该数组的大小。参数dwFlags、pPreviousValue和 pReturnSize是保留参数,应分别赋0、NULL和NULL。

注意,如果在创建子进程时为其指定新的父进程,既使用了

PROC_THREAD_ATTRIBUTE_PARENT_PROCESS,那么在使用

PROC_THREAD_ATTRIBUTE_HANDLE_LIST时,pValue指向的句柄数组中的句柄应该是新父进程句柄表中对象的句柄,而不是调用CreateProcess的进程所有。

当你在CreateProcess的dwCreateFlags参数中指定了

EXTENDED_STARTUPINFO_PRESENT时,你应该向CreateProcess的pStartupInfo 参数传递一个STARTUPINFOEX结构的指针,如下面所示:

1.STARTUPINFOEX esi = { sizeof(STARTUPINFOEX) };

2.esi.lpAttributeList = pAttributeList;

3.bReturn = CreateProcess(

4. ..., EXTENDED_STARTUPINFO_PRESENT, ...

5. &esi.StartupInfo, ...);

其中pAttributeList是按前面的方法创建的属性列表。当你不再需要该属性列表时,应该调用下面的方法回收为其分配的内存:

1.VOID DeleteProcThreadAttributeList(

2. PPROC_THREAD_ATTRIBUTE_LIST pAttributeList);

最后,应用程序可以调用GetStartupInfo获得由其父进程在CreateProcess中指定的STARTUPINFO结构的拷贝:

1.VOID GetStartupInfo(LPSTARTUPINFO pStartupInfo);

注意,无论父进程在调用CreateProcess时参数pStartupInfo指向STARTUPINFO还是STARTUPINFOEX结构,GetStartupInfo总是返回STARTUPINFO结构的拷贝。

ppiProcInfo

ppiProcInfo 参数是PROCESS_INFORMATION结构的指针,调用CreateProcess时该结构必须由开发人员手动分配。CreateProcess 在返回前会填充

ppiProcInfo指向的结构的内容。PROCESS_INFORMATION定义如下:

1.typedef struct _PROCESS_INFORMATION {

2. HANDLE hProcess;

3. HANDLE hThread;

4. DWORD dwProcessId;

5. DWORD dwThreadId;

6.} PROCESS_INFORMATION;

CreateProcess会创建一个进程内核对象和一个线程内核对象,创建初期,系统将其引用计数分别置为1。CreateProcess返回之前会获得这两个对象的访问权限,这样每个对象的引用计数会分别增加1,CreateProcess返回之后,两个对象的引用计数变成2。这意味着如果系统要释放CreateProcess进程/线程

内核对象,相应的进程/线程必须终止,并且调用CreateProcess的线程必须调用 CloseHandle关闭相应的对象句柄,这样才能使得其引用计数变为0,系统

方能释放。

MT明泰_读卡器_API接口函数库使用说明书

API接口函数库使用说明 部文件:V1.0.20 发布时间:2015-04-29

版本更新记录

目录 API接口函数库使用说明 (1) 1. 文档概述 (6) 1.1. 文档围 (6) 1.2. 面向对象 (6) 1.3. 参考资料 (6) 2. 函数库介绍 (6) 2.1. 功能 (6) 2.2. 性能 (7) 3. 运行环境 (7) 3.1. 硬设备 (7) 3.2. 软件的运行平台 (7) 3.3. 函数调用方法 (8) 3.3.1. Delphi调用32位动态库的方法 (8) 3.3.2. VB调用32位动态库的方法 (9) 3.3.3. VC调用32位动态库的方法 (11) 4. API介绍 (11) 4.1. 函数调用流程 (11) 4.1.1. 非接触式存储卡API调用流程 (11) 4.1.2. 非接触式CPU卡片API调用流程 (12) 4.1.3. 接触式CPU卡片API调用流程 (12) 4.1.4. 接触式存储卡片API调用流程 (12) 4.1.5. API调用流程 (12) 4.1.6. 函数操作结果信息表 (16) 4.2. 设备操作函数组 (19) 4.2.1 打开读写器device_open (19) 4.2.2 关闭读写器device_close (19) 4.2.3 判断设备通讯类型device_gettype (19) 4.2.4 设置通讯波特率device_setbaud (20) 4.2.5 获取读写器版本信息device_version (20)

4.2.6 读写器蜂鸣device_beep (21) 4.2.7 LED灯控制 device_ledctrl (21) 4.2.8 获取读写器生产序列号 device_readsnr (22) 4.2.9 获取设备状态 get_device_status (22) 4.2.10 读取读卡器的EEPROM (23) 4.2.11更新读卡器的EEPROM (23) 4.2.12 复位串口配置信息 ReSetupComm (24) 4.2.13 读卡器软复位 device_reset (24) 4.2.14 获取设备状态扩展 get_device_statusEx (25) 4.2.15 获取非接触式CPU卡卡片状态 dev_cardstate (25) 4.2.16 获取接触式CPU卡到位状态 ICC_GetStatus (26) 4.2.17 读EMID号Dev_GetEMID (26) 4.3 接触式卡片操作函数 (27) 4.3.1 判断接触式卡片状态sam_slt_getstate (27) 4.3.2 接触式卡片上电复位sam_slt_reset (28) 4.3.3 接触式卡设置复位波特率sam_slt_reset_baud (28) 4.3.4 接触式卡片下电sam_slt_powerdown (29) 4.4. 非接触 CPU 卡函数 (29) 4.4.1 激活非接触式卡open_card (29) 4.4.2 设置非接触式卡片为halt状态 rf_halt (30) 4.4.3 应用层传输命令card_APDU (31) 4.5 非接触式存储卡操作函数 (31) 4.5.1 激活非接触式存储卡rf_card (31) 4.5.2 非接触式存储卡认证扇区 rf_authentication (33) 4.5.3 非接触式存储卡读数据rf_read (33) 4.5.4 非接触式存储卡写数据rf_write (34) 4.5.5 非接触式存储卡读值块rf_readval (34) 4.5.6 非接触式存储卡写值块rf_initval (35) 4.5.7 非接触式存储卡加值rf_increment (35) 4.5.8 非接触式存储卡减值rf_decrement (36) 4.5.9 非接触式存储卡值传送 rf_transfer (36) 4.6 二代操作函数 (37) 4.6.1 卡操作指令-读卡IDCard_Read (37) 4.6.2 卡操作指令-读卡IDCard_ReadCard (39) 4.6.3卡操作指令根据索引获取数据IDCard_GetCardInfo (40) 4.6.4 获取二代证模块ID IDCard_GetModeID (40) 4.6.5 读卡模块扩展一IDCard_ReadCard_Extra (41) 4.6.6 设置二代证照片存储路径 IDCard_SetPhotoPath (41) 4.6.7 设置二代证照片名字 IDCard_SetPhotoName (42) 4.6.8 读二代证信息扩展二 IDCard_ReadCard_Ex (42) 4.6.9 删除所有二代证照片文件delete_all_photofile (44) 4.6.10 获取卡ID号IDCard_Read_IDNUM (44) 4.6.11 获取卡IDCard_Name (45) 4.6.12 获取卡性别IDCard_Sex (45)

接口调用说明文档

XXX)科技有限公司 数据接口 2015-5-26

目录 第1章引言. ......................................................... 错误!未定义书签。 背景. ........................................................... 错误!未定义书签。 第2章接口与数据定义. ................................................... 错误!未定义书签。 曝光台查询接口. ..................................................... 错误!未定义书签。 曝光台列表查询.......................... 错误!未定义书签。 曝光台详情查询.......................... 错误!未定义书签。 信用公示查询接口定义.......................... 错误!未定义书签。 守信公示列表查询.......................... 错误! 未定义书签。 守信公示详情查询.......................... 错误!未定义书签。 失信公示列表查询.......................... 错误!未定义书签。 失信公示详情查询.......................... 错误!未定义书签。 企业名称查询接口定义.......................... 错误!未定义书签。 Webservice 方法定义 ........................ 错误! 未定义书签。 请求参数. .................................................... 错误! 未定义书签。 返回数据. .................................................... 错误!未定义书签。 企业信息查询接口定义.......................... 错误!未定义书签。 Webservice 方法定义 ........................ 错误! 未定义书签。 请求参数. .................................................... 错误! 未定义书签。 返回数据. .................................................... 错误!未定义书签。

接口使用说明文档

中国移动短信网关 SP端接口使用手册 China Mobile Shot Message Gateway Interface for SP Manual 作者:沈岗 日期:2004年1月 版本:V1.2

一、CMSMIF.CMPPApp 简要说明: 该类采用CMPP协议(V2.0)实现了SP端与移动短信网关的连接处理。 本类中,采用长连接方式与ISMG通讯。通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。参数C、T、N可通过属性配置。 消息发送时采用并发方式,即发送一条消息不等待网关回复确认,继续向网关发送短信,这样发送消息速度非常快,完全取决于网关的处理速度及网络速度。为避免消息丢失,同时采用了滑动窗口流量控制,窗口大小可通过属性设置。 消息接收、网络断开等采用事件触发方式,不需应用程序轮询,在此接口基础之上编程方便。 类中运用了多线程技术,如一条线程处理发送网络包,而另一条线程处理从网关上接收网络包,其他还有一些线程处理检测包、网络连接情况监测等,使程序思路明确、执行效率很高、运行非常稳定。 (一)属性 1.ActiveInterval 说明:检测包发送时间间隔,单位:毫秒。默认值为120000,即120秒。为上 述类说明中的C参数。 2.MaxNetworkPackSize 说明:与ISMG通讯时最大网络包大小,单位:字节。默认值为512Byte。 3.MaxRetryTimes 说明:网络超时最大重发次数,单位:次。默认值为3次。为类说明中的N。 4.OverTime 说明:网络包发送超时时间,单位:毫秒,超过此值还未收到回复则重发。默认值 为60000,即60秒。为类说明中的T。 5.QueueLength 说明:网络队列大小,单位:个,默认值为20。为类说明中的滑动窗口大小, 以控制发送流量。 (二)方法 1.ConnectToIsmg 方法说明: 连接到远程短信网关ISMG上,只有连接到远程短信网关上,才可进行短信收发操作。 在本操作中,自动初始化本地Socket,以连接到指定IP服务器的指定端口上。 声明原型:int ConnectToIsmg(string ServerIP,int Port,string SP_ID,string Secret,string SN) 参数说明: ServerIP:远程短信网关服务器的IP地址,如211.138.200.51 Port:远程短信网关服务器的端口号,如7890 SP_ID:企业服务代码

输入法接口函数说明

输入法编程(转贴)(快看) IME输入法编程 第一章Windows9x系统下汉字输入法的基本原理 Windows系统下汉字输入法实际上是将输入的标准ascii字符串按照一定的编码规则转换为汉字或汉字串,进入到目的地。由于应用程序各不相同,用户不可能自己去设计转换程序,因此,汉字输入自然而然落到WINDOWS系统管理中。 一、输入法与系统的关系 键盘事件应用程序 || Windows的USER.EXE | 输入法管理器 | 输入法 系统的键盘事件有windows的user.exe软件接收后,user.exe在将键盘事件传导输入法管理器(Input Method Manager,简称IMM)中,管理器再将键盘事件传到输入法中,输入法根据用户编码字典,翻译键盘事件为对应的汉字(或汉字串),然后再反传到user.exe 中,user.exe再将翻译后的键盘事件传给当前正运行的应用程序,从而完成汉字的输入。 二、汉字输入法的组成 微软Windows9x系统中汉字输入法的名称是"Input Method Editor " ,简称IME,输入法的程序名称为:*.ime,数据文件名称为*.MB,即通常说的输入法编码表(字典). 实际上IME文件是一个动态连接库程序(DLL),它与dll文件没有区别,只是名称不同而已。 一般汉字输入法都由三个窗口组成: 状态窗口(Status Windows)-显示当前的输入法状态(中文还是英文等站环信息); 编码输入窗口(Composition Windows)-显示当前击键情况; 汉字选择窗口(Candidates Windows)-列出当前编码的全部汉字(串),供用户选择或查询。 上述三个窗口由基本的用户接口(User Interface )函数管理着。 现在我们用Dumpbin.exe打开微软提供的拼音输入法(WINDOWS\SYSTEM\WINPY.IME)看看它有什么组成(这里一WINDOWS98为例,并假定windows系统安装在c:盘下):

通达信函数大全使用说明

软件简介: 通达信全部函数及其用法(2011年最新版) (一)行情函数 1)HIGH(H)最高价返回该周期最高价.2)LOW(L)最低价返回该周期最低价.3)CLOSE(C)收盘价返回该周期收盘价.4)VOL(V)成交量(手)返回该周期成交量.5)OPEN (O)开盘价返回该周期开盘价.6)ADVANCE 上涨家数返回该周期上涨家数. (本函数仅对大盘有效)7)DECLINE 下跌家数返回该周期下跌家数. (本函数仅对大盘有效)8)AMOUNT 成交额(元)返回该周期成交额.9)VOLINSTK 持仓量返回期货该周期持仓量.10)QHJSJ 期货结算价返回期货该周期结算价. 11)BUYVOL 外盘(手)返回外盘,即时行情数据 12)SELVOL 外盘(手)返回外盘 13)ISBUYORDER 主动性买单返回当前成交是否为主动性买单.用法: ISBUYORDER,当本笔成交为主动性买盘时,返回1,否则为0 14)DHIGH 不定周期最高价返回该不定周期最高价.15)DOPEN 不定周期开盘价返回该不定周期开盘价.16) DLOW 不定周期最低价返回该不定周期最低价.17)DCLOSE 不定周期收盘价返回该不定周期收盘价.18) DVOL 不定周期成交量价返回该不定周期成交量价.19)NAMELIKE 模糊股票名称返回股票名称是否以参数开头.

用法: if(NAMELIKE('ST'),x,y); 20)CODELIKE 模糊股票代码返回股票代码是否以参数开头. 用法: if(CODELIKE('600'),x,y); 21)INBLOCK 属于某板块返回股票是否属于某板块. 用法: if(INBLOCK('沪深300'),x,y); (二)时间函数 1)PERIOD 周期取得周期类型. 结果从0到11,依次分别是1/5/15/30/60分钟,日/周/月,多分钟,多日,季,年. 2)DATE 日期取得该周期从1900以来的的年月日. 用法: DATE 例如函数返回1000101,表示2000年1月1 日,DATE+19000000后才是真正的日期值 3)TIME 时间取得该周期的时分秒.用法: TIME 函数返回有效值范围为(000000-235959) 4)YEAR 年份取得该周期的年份.5)MONTH 月份取得该周期的月份.用法: 函数返回有效值范围为(1-12) 6)WEEKDAY 星期取得该周期的星期数.用法: WEEKDAY 函数返回有效值范围为(1-7) 7)DAY 日取得该周期的日期.用法: DAY 函数返回有效值范围为(1-31) 8)HOUR 小时取得该周期的小时数.用法: HOUR 函数返回有效值范围为(0-23),对于日线及更长的分析周期值为0

帝国CMS版接口说明

帝国CMS接口使用手册 一、简介 1、本接口应用于帝国CMS 版新闻系统模型的栏目文章发布; 2、本接口可以自动生成文章、栏目、首页等静态HTML页面; 3、本接口可以生成随机点击数,详见发布接口参数说明; 4、发布时请使用管理员用户帐号; 5、在帝国CMS utf8版使用本接口时,请在发布规则中选择编码为UTF-8; 6、本接口基于帝国CMS UTF8版制作,适用于帝国CMS GBK/utf-8等版本,应用于其他版本时请自行测试调整;; 7、接口文件无须任何改动即可使用,如果你希望增加校验或其他功能,请仔细修改; 8、2个接口文件请复制在网站 /e/admin目录下使用; 二、安装接口 在接口文件夹中找到接口文件,如图: 请将、等接口文件上传到指定目录,请使用二进制方式上传,如图: 三、配置发布规则 1、将范例发布规则文本导入ET2发布配置,或使用软件内置发布规则范例,如图:

2、将检查网址和发布网址中的“您的网站”改为您要发布的网站网址,如图: 3、在检查网址填上您要发布的栏目ID,如图: 4、在参数取值页,填上您要发布的网站栏目ID,如图: 这里查看栏目ID:

4、填上您的管理账号、密码,注意格式,如图: 四、接口说明 一、检查接口 1、接口文件名,为保密,请自行修改文件名; 2、本接口文件复制在网站/e/admin目录使用,如果目录名有变更,请自行对应; 3、主要参数 keyboard 文章标题 classid 栏目ID,用于指定检查栏目,可在后台网站栏目管理处查看; vercode 校验码,请自行设定,并在检查接口文件开始处修改$vercode 使其一致; 4、发布配置-文章检查网址处,可以如下填写: 注:使用大小写敏感的服务器的用户请注意网址大小写和网站文件一致 5、接口文件无须任何改动即可使用,如果你希望增加校验或其他功能,请仔细修改; 二、发布接口 1、接口文件名,为保密,请自行修改文件名; 2、本接口文件请复制在网站/e/admin目录下使用,为保密,请自行修改文件名;

DLL函数接口说明

typedef void __stdcall (*fun_AddResult)(char pDataStr[10][255],double pDataDouble[100]); extern "C" void __declspec(dllimport) __stdcall SetBackColor(TColor pBkColor); extern "C" void __declspec(dllimport) __stdcall FanSelect( void *pSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSeriesNameCount,//系列名称个数,-1时表示全部选择 void *pSubSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSubSeriesNameCount,//子系列名称个数,-1时表示全部选择 const double &pFlow, //风量 const int &pFlowUnitType, //风量单位类型0-m^3/h 1-m^3/s 2-l/s 3-cfm const double &pPres, //风压 const int &pPresUnitType, //风压单位类型0-Pa 1-mmH2O 2-kgf/cm^2 3-inH2O const int &pPresType, //风压类型0-全压1-静压 const int &pOutFanType,//出风方式0-管道出风1-自由出风 const double &pAirDensity,//空气密度 const double &pMotorSafeCoff,//电机容量安全系数(%) const bool &pUserSetMotorSafeCoff,//用户设定了电机容量安全系数 double &rFlow_STDUnit,//标准单位下的风量 fun_AddResult pAddResult//函数指针,用于回传数据 ); extern "C" void __declspec(dllimport) __stdcall Belt_Selection( const char *pSeriesName, const char *pSubTypeName, const char *pModelName, const int &pSped_DataType,//电机转速类型0-标准数据1-用户数据默认为0(界面选择) const int &pHz_DataType,//频率选择0-50HZ 1-60HZ(界面选择) const int &pRotation,//出风旋转角度R0,R90,R180,R270(参考常量定义) const double &pFanSped,//风机转速(第一步计算得到) const double &pMotorPow,//电机功率(第一步计算得到) const double &pFlow_STDUnit,//标准单位下的风量 const double &pTPres,//全压(第一步计算得到) const double &pSPres,//静压(第一步计算得到) const double &pFTEff,//全压内效率(第一步计算得到) const double &pSdbA,//噪声(第一步计算得到) const int &pV olt,//用户选择的电压(参考电压常量声明V380 V400) , bool pPole[4],//用户选择的极数2,4,6,8 bool pBeltType[4],//用户选择的皮带类型SPZ SPA SPB SPC const bool &pBeSetFanSped,//用户设定了风机转速 const double &pFanSpedRt_User,//用户设定的风机转速差 const bool &pBeSetBeltMoveSped,//用户设定最大皮带运动速度 const double &pBeltMoveSped_User,//用户设定的最大皮带运动速度

Excel表格中的一些基本函数使用方法

Excel表格中的一些基本函数使用方法 一、输入三个“=”,回车,得到一条双直线; 二、输入三个“~”,回车,得到一条波浪线; 三、输入三个“*”或“-”或“#”,回车,惊喜多多; 在单元格内输入=now()显示日期 在单元格内输入=CHOOSE(WEEKDAY(I3,2),"星期一","星期二","星期三","星期四","星期五","星期六","星期日") 显示星期几 Excel常用函数大全 1、ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值。 使用格式:ABS(number) 参数说明:number代表需要求绝对值的数值或引用的单元格。 应用举例:如果在B2单元格中输入公式:=ABS(A2),则在A2单元格中无论输入正数(如100)还是负数(如-100),B2中均显示出正数(如100)。 特别提醒:如果number参数不是数值,而是一些字符(如A等),则B2中返回错误值“#VALUE!”。 2、AND函数 函数名称:AND 主要功能:返回逻辑值:如果所有参数值均为逻辑“真(TRUE)”,则返回逻辑“真(TRUE)”,反之返回逻辑“假(FALSE)”。

使用格式:AND(logical1,logical2, ...) 参数说明:Logical1,Logical2,Logical3……:表示待测试的条件值或表达式,最多这30个。 应用举例:在C5单元格输入公式:=AND(A5>=60,B5>=60),确认。如果C5中返回TRUE,说明A5和B5中的数值均大于等于60,如果返回FALSE,说明A5和B5中的数值至少有一个小于60。 特别提醒:如果指定的逻辑条件参数中包含非逻辑值时,则函数返回错误值“#VALUE!”或“#NAME”。 3、AVERAGE函数 函数名称:AVERAGE 主要功能:求出所有参数的算术平均值。 使用格式:AVERAGE(number1,number2,……) 参数说明:number1,number2,……:需要求平均值的数值或引用单元格(区域),参数不超过30个。 应用举例:在B8单元格中输入公式: =AVERAGE(B7:D7,F7:H7,7,8),确认后,即可求出B7至D7区域、F7至H7区域中的数值和7、8的平均值。 特别提醒:如果引用区域中包含“0”值单元格,则计算在内;如果引用区域中包含空白或字符单元格,则不计算在内。 4、COLUMN 函数 函数名称:COLUMN 主要功能:显示所引用单元格的列标号值。

CAN应用接口函数

CAN应用接口函数库使用手册V1.0

目录 1.接口卡设备类型定义 (3) 2.错误码定义 (4) 3.函数库中的数据结构定义 (5) 3.1.VCI_BOARD_INFO (5) 3.2.VCI_CAN_OBJ (6) 3.3.VCI_CAN_STATUS (7) 3.4.VCI_ERR_INFO (8) 3.5.VCI_INIT_CONFIG (9) 3.6.VCI_RxAcptMask (10) 3.7.VCI_RxAcptFilter (11) 4.接口库函数说明 (12) 4.1.FD_OpenDevice (12) 4.2.FD_CloseDevice (13) 4.3.FD_InitCan (14) 4.4.FD_ReadBoardInfo (15) 4.5.FD_GetReceiveNum (16) 4.6.FD_ClearBuffer (17) 4.7.FD_StartCAN (18) 4.8.FD_ResetCAN (19) 4.9.FD_Transmit (20) 4.10.FD_Receive (21) 4.11.FD_RxAcptMaskInit (22) 4.12.FD_DisableRxAcptFilter (23) 4.13.FD_RxAcptFilterInit (24) 4.13.FD_SetOperationMode (25) 5.接口库函数使用方法 (26) 5.1.VC调用动态库的方法 (26) 5.2.VB调用动态库的方法 (26)

1.接口卡设备类型定义 各个接口卡的类型定义如下: 设备名称设备类型号备注 USBCAN11第一代USBCAN USBCAN22第二代USBCAN CAN2323待开发PCICAN4待开发

常用函数使用说明

可以给一列数后面标注大小 可以在一列数前面标记人民币符号 可以在一句话中提起字符 提取年 提取月

在身份证中提取年月日 可以比对,对比两个单元格里的内容是否一样 给数字固定四舍五入

显示系统当前的日期

向下舍入 1、向上四舍五入数字函数ROUND ⑴功能 按指定的位数对数值进行四舍五入。 ⑵格式 ROUND(数值或数值单元格,指定的位数) ⑶示例 A列 B列 12.351 325.525

…… B1中输入公式 ①保留2位小数——从千分位向百分位四舍五入。 =ROUND(A1,2)=12.35 向下复制公式到B2 =ROUND(A2,2)=325.53 ②四舍五入取整数——从十分位向个位四舍五入保留整数。 B1中输入公式 =ROUND(A1,0)=12 向下复制公式到B2 =ROUND(A2,0)=326 ③四舍五入到十位——从个位向十位四舍五入保留到十位数字。 B1中输入公式 =ROUND(A1,-1)=10 向下复制公式到B2 =ROUND(A2,-1)=330 说明: 函数ROUND的第1个参数可以是具体的数值也可以是数值单元格引用。 函数ROUND的第2个参数——指定保留的位数,保留小数位用正整数表示,即1,2,3,4……(对应十分位、百分位、千分位、万分位……);保留整数位用非正整数表示,即0,-1,-2,-3,……(对应个位、十位、百位……)。 2、向下舍数字函数ROUNDDOWN ⑴功能 按指定的位数对数值进行舍入。 ⑵格式 ROUNDDOWN(数值或数值单元格,指定的位数) ⑶示例 A列 B列 12.351 325.525 …… B1中输入公式 ①保留2位小数——舍去千分位及以后的小数位保留到百分位。 =ROUNDDOWN (A1,2)=12.35 向下复制公式到B2 =ROUNDDOWN (A2,2)=325.52 ②舍去小数位保留整数——舍去十分位及以后的小数位保留整数部分。 B1中输入公式 =ROUNDDOWN (A1,0)=12 向下复制公式到B2 =ROUNDDOWN (A2,0)=325 ③整数保留到十位——整数部分舍去个位上大于0的数字(用0代替),保留十位及以前的高位数字。

API函数手册

POSTEK PPLⅠAPI函数手册 G Series 条码标签打印机 Version 2.00 深圳市博思得通信发展有限公司 二○○四年

API函数库文件说明 名称:CDFPSK.dll 中文版本编号:1.X.X.X 英文版本编号:2.X.X.X 版权所有:?2004深圳市博思得通信发展有限公司。保留所有权利。 用途 本API函数库为深圳市博思得通信发展有限公司条码标签打印机的用户提供一组命令,为他们编写基于Windows9X,NT,2000,XP等操作系统的应用程序提供便利。 本API函数库仅支持本公司产品。 缩略语对照 PPLⅠ:深圳市博思得通信发展有限公司的第一套打印机编程语言(Printer Porgram Language Ⅰ)。 API:应用程序编程接口(Application Program Interface)。 Dots:像素(pixel)是一种计算机科学技术尺寸单位,原指电视图像成像的最小单位,在打印机领域表示打印机的最小打印成像单位:1dot等于一英寸除以打印机的最大分辨率。 - 对于203DPI的打印机来说, 1dot = 25.4mm/203 = 0.125mm(1dot = 1000 / 203 = 5mil); - 对于300DPI的打印机来说, 1dot = 25.4mm/300 = 0.085mm(1dot = 1000 / 300 = 3mil)。 TrueType Font:是基于Windows操作系统使用,可装卸的字体。 - 已经安装的TrueType Font,都可以被本函数使用。 使用前须知 字符串 * 字符串以双引号(“)作为起始和结束标记; *

OCX接口说明V4

1.概述 精伦电子股份有限公司开发的二代身份证读卡系列机具适用于相关行业的联机型应用。产品提供了完善的二次软件开发接口(API)。本手册针对提供的ActiveX控件,对开发接口的文件组成、方法定义格式、调用方法及返回值等进行了详细的说明。 2.接口文件说明 接口文件包括: IdrControl.ocx Dewlt.dll Savephoto.dll Wltrs.dll 适用开发语言: 网络脚本开发 第一次使用时,需要以管理员身份运行SetupOCX.exe对控件进行安装注册。 更新说明: V4.0.1.0增加对编码设备支持,可设置日志文件。 V4.0.0.6增加RepeatRead 方法,可设置后进行连续读身份证。 V4.0.0.0增加对210-P的支持。 V3.4.1.4解决和13002相关在20130726的读卡体管理号问题。 V3.4.1.3解决一个潜在导致内存泄漏的问题。 V3.4.1.2增加GetCardPhotobuf方法,用于获取身份证正反面图片JPG格式Base64编码信息。 V3.4.1.0增加ExportPhoto方法,可在读卡结束后生成指定照片和卡图片文件名。

3.接口方法说明 3.1. 身份证方法 3.1.1.读身份证方法 原型:short ReadCard(long iPort,BSTR PhotoPath) 说明:本方法将打开端口、找卡、读卡等功能进行了集成,可用于打开串口或USB口并读取二代证卡内信息。 参数: 1、iPort:设置串口、USB或iDR210免驱动USB-HID。 普通串口 1 – 16(十进制) 例如: 1:串口1(COM1) 2:串口2(COM2) USB USB-HID (iDR210) 1001 例如: 1001:USB 2、PhotoPath:生成图片文件的绝对路径,包括生成的照片文件photo.bmp,photo.jpg和指定文件名的照片文件,和身份证正反面图片card.jpg。该参数为""时,默认将照片文件保存到Windows系统临时文件目录(GetTempPath())。也可自行设置保存的路径,比如:"d:\\photos\\photo.bmp",注意文件参数必须设置正确,才能正确地将相片文件放在指定位置(相片文件夹若不存在,将会自动生成新文件夹)。 返回值: 值说明 1 正确 -1 端口初始化失败 -2 卡认证失败(请重新将 卡放到读卡器) -3 读取数据失败 -4 生成照片文件失败(请 检查设定路径和磁盘空

VLOOKUP函数的使用方法(图解说明_很详细)

VLOOKUP函数调用方法如下:(本次以提取RRU挂高数据为例) 一、本次涉及的相关文档。 1.《某地区TD宏站现场勘测数据汇总表》如表1-1,共1000多站,本次共列出104个站点的信息: 查看原文档请双击图标:某地区TD宏站现场 查勘数据汇总表,表1-1抓图如下: 2.某工程报价单,共30个宏站,如表1-2(本报价单其他信息均删除,只保留了站点名) 查看原文档请双击图标:某工程报价单.xlsx ,表1-2抓图如下: 二、本次我们以从表1-1中提取表1-2中30个站点的RRU挂高为例,具体步骤如下: 1.先在表1-2中增加“RRU挂高”这一列,然后先提取“某城关水泵厂南”的RRU挂高。操作方法为双击下图所示灰色表格,然后鼠标左键单击列表上面的fx插入函 数。 2.点fx后弹出如下图标,在下拉列表中选择“VLOOKUP”,点确定。

3.点确定后,弹出VLOOKUP函数调用表,包含4个部分(lookup_value、Table_array、C ol_index_num、Range_lookup)。 lookup_value:需要在数据表首列进行搜索的值,本次值为表1-1中的位置B2,用 鼠标单击表1-1中的“某城关水泵厂南”,即可自动输入。。 Table_array:需要在其中搜索数据的信息表,即在表1-2中选择一个搜索区域, 注意所选区域第一列必须是与Lookup_value中查找数值相匹配的 列(本次表1-1中的B列),最后一列必须大于等于RRU挂高那一列 (大于等于C列),至于下拉行数肯定要大于等于106行。如下图: 选择相关区域后,VLOOKUP表中的Table_array会自动输入表1-1中所选区域,如 下图:

ORACLE数据库API接口函数设计说明

ORACLE数据库API接口函数设计说明 API接口函数使用示例: 参见程序OCIDEMO.DSW //工程中不用在连接ociw32.lib只用xjoci.lib就行了。 假定: 工程文件为newocidemo,所在目录为c:\newocidemo,newocidemo.exe 位于c:\newocidemo\debug下面 使用步骤: 1、将MyConnection.h;oratypes.h;ocidem.h;ocidfn.h;xioci.lib复制到c:\newocidemo下面 2、将xioci.dll复制到c:\newocidemo\debug下面 3、设置project 下的settings 下面的link 中的object/library modules: 为xjoci.lib 4、在file中添加MyConnection.h,从而在class中会出现connection,cursor两个新类 API接口函数类设计: CONNECTION类 class connection { friend class cursor; public: BOOL IsConnected(); connection();

~connection(); BOOL connect(char *username, char *password,char *sername); BOOL disconnect(); void display_error() const; private: Lda_Def lda; ub1 hda[HDA_SIZE]; enum conn_state { not_connected, connected }; conn_state state; }; BOOL connect(char *username, char *password,char *sername); 函数用途:connect函数建立OCI程序与ORACLE数据库的连接参数说明:char *username,--用户名 char *password,--口令 char *sername—主机字符串(数据库别名)。 返回值:连接成功返回TRUE,不成功返回FALSE BOOL disconnect(); 函数用途:disconnect函数断开与数据库的连接 参数说明:

文华函数使用说明

文华函数使用说明 求绝对值。 用法: ABS(X)返回X的绝对值。 例:ABS(-10)返回10,ABS(CLOISE-10) 返回收盘价和10的价差。 求反余弦值。 用法: ACOS(X)返回X的反余弦值。 求反正弦值。 用法: ASIN(X)返回X的反正弦值。 求反正切值。 用法: ATAN(X)返回X的反正切值。

求平均绝对偏差。 用法: AVEDEV(X,N)返回X在N周期内的平均绝对偏差。 取得均价。 用法: AVPRICE返回均价。 取K线的位置。 用法: BARPOS 取某K线的位置。 设置背景的样式。 用法: BACKGROUNDSTYLE(i)设置背景的样式。 i = 0 或 1。

将当前位置到若干周期前的数据设为1。 用法: BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。例:BACKSET(CLOSE>OPEN,3);表示当K线收阳时,自当前位置到3周期前的数值设为1 该函数参数支持变量计算如BACKSET(CLOSE>OPEN,VAR1);//VAR1是变量 本函数运算量很大,将占用很多的CPU资源,导致行情刷新速度变慢,请谨慎使用! 求上一次条件成立到当前的周期数。 用法: BARSLAST(X):上一次X不为0到现在的天数 本函数运算量很大,将占用很多的CPU资源,导致行情刷新速度变慢,请谨慎使用! 介于两个数之间。 用法: BETWEEN(A,B,C)表示A处于B和C之间时返回1(Yes),否则返回0(No) 例:BETWEEN(CLOSE,MA5,MA10); 表示收盘价介于5日均线与10日均

C++接口使用说明

NetCDF C++接口使用说明 作者:杜鸿飞 完成时间:2004年4月

目录 一、NetCDF文件介绍 (2) 二、NetCDF C++类函数详解 (3) 1. NcFile类公有成员函数 (3) 文件操作 (3) 维数操作 (4) 变量操作 (4) 属性操作 (6) 2. NcDim类公有成员函数 (7) 3. NcVar类公有成员函数 (7) 4. NcAtt类公有成员函数 (9) 三、NetCDF C++使用举例 (10)

//***************** function about dimension ****************************** int num_dims(); 返回文件所含dim数目 int unlimdimid(); 返回unlimited dimension的ID void def_dim(NcDim &dim); 将参数dim定义到文件中 NcDim inq_dim(int dimid); 返回文件中ID号为dimid的dim维数 NcDim inq_dim(const string dimname); 返回文件中名字为dimname的dim维数 void rename_dim(int dimid, string name); 将文件中ID号为dimid的维数重命名为name //***************** function about variable ****************************** int num_vars(); 返回文件所含var数目 void def_var(NcVar &var); 将参数var定义到文件中 NcVar inq_var(int varid); 返回文件中ID号为varid的var变量 NcVar inq_var(const string varname); 返回文件中名字为varname的var变量 void rename_var(int varid, string name); 将文件中ID号为varid的变量重命名为name template void put_var_single(int varid, int index[], Type value); 给文件中ID号为 varid的var变量写入一个值 varid:欲写入值的变量的ID号 index: 欲写入值在变量中位置的索引,用数组存储,如对于一个3维变量,对其任一元素写值,index为一含3个元素的数组(0,0,0)到(2,2,2); value: 将要写入的值,为摸板参数类型,其类型由函数自动解析。 template void put_var_entire(int varid, Type block[]); 给文件中ID号为 varid的var变量整体写入值 varid:欲写入值的变量的ID号 block: 存储将要写入值的数组地址,该数组大小应不小于变量实际元素个数。block为摸板参数类型,其类型由函数自动解析。 template void put_var_array(int varid, int start[], int count[], Type *block); 给文件中ID号为 varid的var变量部分写入值 varid:欲写入值的变量的ID号 start:欲写入值的其始位置索引,格式同put_var_single函数中的index参数

EXCEL中常用函数及使用方法

EXCEL中常用函数及使用方法 Excel函数一共有11类:数据库函数、日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及用户自定义函数。 1.数据库函数 当需要分析数据清单中的数值是否符合特定条件时,可以使用数据库工作表函数。例如,在一个包含销售信息的数据清单中,可以计算出所有销售数值大于1,000 且小于2,500 的行或记录的总数。Microsoft Excel 共有12 个工作表函数用于对存储在数据清单或数据库中的数据进行分析,这些函数的统一名称为Dfunctions,也称为D 函数,每个函数均有三个相同的参数:database、field 和criteria。这些参数指向数据库函数所使用的工作表区域。其中参数database 为工作表上包含数据清单的区域。参数field 为需要汇总的列的标志。参数criteria 为工作表上包含指定条件的区域。 2.日期与时间函数 通过日期与时间函数,可以在公式中分析和处理日期值和时间值。 3.工程函数 工程工作表函数用于工程分析。这类函数中的大多数可分为三种类型:对复数进行处理的函数、在不同的数字系统(如十进制系统、十六进制系统、八进制系统和二进制系统)间进行数值转换的函数、在不同的度量系统中进行数值转换的函数。 4.财务函数 财务函数可以进行一般的财务计算,如确定贷款的支付额、投资的未来值或净现值,以及债券或息票的价值。财务函数中常见的参数: 未来值(fv)--在所有付款发生后的投资或贷款的价值。 期间数(nper)--投资的总支付期间数。 付款(pmt)--对于一项投资或贷款的定期支付数额。 现值(pv)--在投资期初的投资或贷款的价值。例如,贷款的现值为所借入的本金数额。 利率(rate)--投资或贷款的利率或贴现率。 类型(type)--付款期间内进行支付的间隔,如在月初或月末。 5.信息函数 可以使用信息工作表函数确定存储在单元格中的数据的类型。信息函数包含一组称为IS 的工作表函数,在单元格满足条件时返回TRUE。例如,如果单元格包含一个偶数值,ISEVEN 工作表函数返回TRUE。如果需要确定某个单元格区域中是否存在空白单元格,可以使用COUNTBLANK 工作表函数对单元格区域中的空白单元格进行计数,或者使用ISBLANK 工作表函数确定区域中的某个单元格是否为空。 6.逻辑函数 使用逻辑函数可以进行真假值判断,或者进行复合检验。例如,可以使用IF 函数确定条件为真还是假,并由此返回不同的数值。

相关文档