AU3如何得到变量、数组的指针(地址)
本帖最后由 baikaifang 于 2009-8-11 12:59 编辑调用API函数时,很多函数需要提供指针,在Visual C++ 中使用 "& 变量名"或"& 数组名"就可以取得指向变量或数据的指针,AU3如果调用这些API函数,该怎么弄啊!请大家指定下,谢谢!
// WinIoTest.cpp
#include <windows.h>
#include <stdio.h>
#include "winio.h"
void main()
{
DWORD dwPortVal;
DWORD dwMemVal;
bool bResult;
HANDLE hPhysicalMemory;
PBYTE pbLinAddr;
bResult = InitializeWinIo();
if (bResult)
{
GetPortVal(0x378, &dwPortVal, 4);
SetPortVal(0x378, 10, 4);
pbLinAddr = MapPhysToLin((PBYTE)0xA0000, 65536, &hPhysicalMemory);
if (pbLinAddr)
{
*pbLinAddr = 10;
UnmapPhysicalMemory(hPhysicalMemory, pbLinAddr);
}
GetPhysLong((PBYTE)0xA0000, &dwMemVal);
SetPhysLong((PBYTE)0xA0000, 10);
ShutdownWinIo();
}
else
{
printf("Error during initialization of WinIo.\n");
exit(1);
}
}
---------------------------------------------------------------------------------------------------------
// Winio.h
#ifndef WINIO_H
#define WINIO_H
#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif
extern "C"
{
WINIO_API bool _stdcall InitializeWinIo();
WINIO_API void _stdcall ShutdownWinIo();
WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
WINIO_API bool _stdcall RemoveWinIoDriver();
}
extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;
bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();
#endif
-----------------------------------------------------------------------------------------------------------
上例中的函数 GetPortVal、MapPhysToLin、GetPhysLong,这些函数中的个别参数都使用了指针,不知道在AU3里面该怎么处理这种传递指针的参数。 不懂啊..... 楼主贴个VC++的例子上来~ 楼主贴个VC++的例子上来~
pusofalse 发表于 2009-6-9 05:34 http://www.autoitx.com/images/common/back.gif
已经重新编辑贴子,将VC++的例子加上了。 本帖最后由 pusofalse 于 2009-6-9 10:50 编辑
$iResult = DllCall("WinIo.dll", "int", "GetPortVal", "short", 0x378, "dword*", 0, "int", 4)
Msgbox(0, $iResult, $iResult) 结构体使用DllStructGetPtr 得到指针,
变量及数组无法直接取得指针,
不过对于变量,你可以先建立一个struct,然后将这个变量作为member加入struct,再取得这个member的指针:Global $iA = 16
Global $tagA = "int A"
Global $tA = DllStructCreate($tagA)
Global $ptA = DllStructGetPtr($tA)
; Set the data
DllStructSetData($tA, "A", $iA)
; Use the pointer to extract the data
MsgBox(64, "DLL Success Test", "A = " & DllStructGetData($tA, 1))数组指针暂时无解 贵宾好久不见了 嘿嘿,又学了3个代码 结构体使用DllStructGetPtr 得到指针,
变量及数组无法直接取得指针,
不过对于变量,你可以先建立一个struct,然后将这个变量作为member加入struct,再取得这个member的指针:Global $iA = 16
Global $tagA = "i ...
zcbenz 发表于 2009-6-9 11:16 http://www.autoitx.com/images/common/back.gif
谢谢指点,自己也去官网逛了一下,发现也只有这种方式了,暂时先不结贴,等等看下别的朋友有没有更好的方法。 学习了,蛮有用的 数组可否使用
ptr(array[$i])=ptr(array)+sizeof(data)*$i 实现 用的.......................................
页:
[1]