背景1
var text:String;
text:='hello';
myFunc(text);
Run Code Online (Sandbox Code Playgroud)
上下文2
function myFunc(mytext:String);
var textcopy:String;
begin
textcopy:=mytext;
end;
Run Code Online (Sandbox Code Playgroud)
myFunc
从Context1调用Context2,局部变量mytext
指向Context2之外的内存?或者在mytext
范围内有自己的内存空间,并用相同的内容填充/复制text
?我可能遗漏了一些非常基本的东西,因为我收到了一个access violation
错误.
有没有办法明确指定一个函数是应该通过引用还是通过值接收参数,然后像C一样复制?我不确定我是怎么做的.
我试图在delphi上使用Windows API中的函数,Windows Wlanapi.dll(Native WIFI API)的函数
DWORD WINAPI WlanOpenHandle(
__in DWORD dwClientVersion,
__reserved PVOID pReserved,
__out PDWORD pdwNegotiatedVersion,
__out PHANDLE phClientHandle
);
Run Code Online (Sandbox Code Playgroud)
WlanHostedNetworkQueryProperty
DWORD WINAPI WlanHostedNetworkQueryProperty(
__in HANDLE hClientHandle,
__in WLAN_HOSTED_NETWORK_OPCODE OpCode,
__out PDWORD pdwDataSize,
__out PVOID *ppvData,
__out PWLAN_OPCODE_VALUE_TYPE *pWlanOpcodeValueType,
__reserved PVOID pvReserved
);
Run Code Online (Sandbox Code Playgroud)
我试图使用这些功能和其他人几个小时,阅读MSDN参考和其他网站,但我不能让这个工作.
我的尝试
type
TWlanOpenHandle = function( dwClientVersion:DWORD;
pReserved:Pointer;
pdwNegotiatedVersion:PDWORD;
phClientHandle:PHANDLE
):DWORD; stdcall;
function apiWlanOpenHandle( dwClientVersion:DWORD;
pReserved:Pointer;
pdwNegotiatedVersion:PDWORD;
phClientHandle:PHANDLE
):DWORD;
implementation
function apiWlanOpenHandle ( dwClientVersion:DWORD; pReserved:Pointer; pdwNegotiatedVersion:PDWORD; phClientHandle:PHANDLE ):DWORD;
var
WlanOpenHandle: TWlanOpenHandle;
DLL: Cardinal;
begin
DLL:=LoadLibrary('Wlanapi.dll'); …
Run Code Online (Sandbox Code Playgroud)