delphi2010调用wlan api的问题

lght lght 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在delphi2010里调用wlan的api函数,网上没找到现成的声明,自己翻译了一部分,调用函数不报错,函数返回结果也对。但传入的参数返回结果不对。
各位帮忙看看。

以下是部分声明

_WLAN_INTERFACE_STATE = (
wlan_interface_state_not_ready = 0,
wlan_interface_state_connected = 1,
wlan_interface_state_ad_hoc_network_formed = 2,
wlan_interface_state_disconnecting = 3,
wlan_interface_state_disconnected = 4,
wlan_interface_state_associating = 5,
wlan_interface_state_discovering = 6,
wlan_interface_state_authenticating = 7
);
//} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
WLAN_INTERFACE_STATE = _WLAN_INTERFACE_STATE;
PWLAN_INTERFACE_STATE = ^_WLAN_INTERFACE_STATE;

_WLAN_INTERFACE_INFO = packed record
InterfaceGuid: TGUID;
strInterfaceDescription: array[0..255] of WideChar;
isState: WLAN_INTERFACE_STATE;
end;
//} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
WLAN_INTERFACE_INFO = _WLAN_INTERFACE_INFO;
PWLAN_INTERFACE_INFO = ^_WLAN_INTERFACE_INFO;

_WLAN_INTERFACE_INFO_LIST = packed record
dwNumberOfItems: DWORD;
dwIndex: DWORD;
InterfaceInfo: PWLAN_INTERFACE_INFO;
end;
//} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
WLAN_INTERFACE_INFO_LIST = _WLAN_INTERFACE_INFO_LIST;
PWLAN_INTERFACE_INFO_LIST = ^_WLAN_INTERFACE_INFO_LIST;
PPWLAN_INTERFACE_INFO_LIST = ^PWLAN_INTERFACE_INFO_LIST;

function WlanOpenHandle(dwClientVersion: DWORD; pReserved: Pointer;
pdwNegotiatedVersion: PDWORD; phClientHandle: PHandle
): DWORD; stdcall;

function WlanCloseHandle(hClientHandle: THandle;
pReserved: Pointer): DWORD; stdcall;

function WlanSetProfile(hClientHandle: THandle; const pInterfaceGuid: PGUID;
dwFlags: DWORD; strProfileXml: LPCWSTR; strAllUserProfileSecurity: LPCWSTR;
bOverwrite: BOOL; pReserved: Pointer; var pdwReasonCode: DWORD
): DWORD; stdcall;

function WlanEnumInterfaces(hClientHandle: THandle; pReserved: Pointer;
ppInterfaceList: PPWLAN_INTERFACE_INFO_LIST): DWORD; stdcall;

function WlanGetProfile(hClientHandle: THandle;
const pInterfaceGuid: PGUID; strProfileName: LPCWSTR;
pReserved: Pointer; var pstrProfileXml: PWideChar;
var pdwFlags: DWORD; var pdwGrantedAccess: DWORD): DWORD; stdcall;


以下是调用
WlanEnumInterfaces的参数pList.InterfaceInfo.InterfaceGuid不对,我用网上下的一个c#的代码调试了,得到的是正确的。

var
dwVer, dwRet, dwFlag, dwAccess: DWORD;
phClient: THandle;
pList: PWLAN_INTERFACE_INFO_LIST;
pInfo: WLAN_INTERFACE_INFO;
i: Integer;
profile: PWideChar;
begin
dwRet := WlanOpenHandle(1, nil, @dwVer, @phClient);
if dwRet <> ERROR_SUCCESS then
Exit;

pList := nil;
dwRet := WlanEnumInterfaces(phClient, nil, @pList);
if dwRet <> ERROR_SUCCESS then
begin
OutputDebugString(PChar(IntToStr(dwRet)));
Exit;
end;
for i := 0 to pList.dwNumberOfItems - 1 do
begin
pInfo := pList.InterfaceInfo^;
lst1.Items.Add(GUIDToString(pInfo.InterfaceGuid));

dwFlag := 0;
dwAccess := 0;
profile := nil;
dwRet := WlanGetProfile(phClient, @pInfo.InterfaceGuid, 'vlan', nil,
profile, dwFlag, dwAccess);
if dwRet = ERROR_SUCCESS then
begin
lst1.Items.Add(profile);
end;
Inc(pList.InterfaceInfo);
end;

WlanCloseHandle(phClient, nil);
...全文
评论 11
收藏 已收藏
分享
返回顶部
lght
Windows SDK/API 1,184 成员 22,326 内容