问题
I'm trying to create a WifiConfiguration for Android. All other properties can be set. But if i try to set the SSID or BSSID, i'm getting a segmentation fault (11) and the app and Delphi just hangs.
var
WIFIConfig: JWifiConfiguration;
begin
WIFIConfig := TJWifiConfiguration.JavaClass.init;
WIFIConfig.hiddenSSID := false; -> works
WIFIConfig.SSID := StringtoJString('"YOUR_WLAN_SSID"'); -> App just hangs
end;
http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
JWifiConfigurationClass = interface(JObjectClass)
['{F69F53BC-BC63-436A-8DA9-57389B30CAA8}']
function init: JWifiConfiguration; cdecl; overload;
end;
[JavaSignature('android/net/wifi/WifiConfiguration')]
JWifiConfiguration = interface(JObject)
['{382E85F2-6BF8-4255-BA3C-03C696BC6451}']
function _GetSSID: JString;
procedure _SetSSID(Value: JString);
function _GetBSSID: JString;
procedure _SetBSSID(Value: JString);
function _GethiddenSSID: boolean;
procedure _SethiddenSSID(Value: boolean);
function _GetallowedAuthAlgorithms: JBitSet;
procedure _SetallowedAuthAlgorithms(Value: JBitSet);
function _GetallowedGroupCiphers: JBitSet;
procedure _SetallowedGroupCiphers(Value: JBitSet);
function _GetallowedKeyManagement: JBitSet;
procedure _SetallowedKeyManagement(Value: JBitSet);
function _GetallowedPairwiseCiphers: JBitSet;
procedure _SetallowedPairwiseCiphers(Value: JBitSet);
function _GetallowedProtocols: JBitSet;
procedure _SetallowedProtocols(Value: JBitSet);
function _GetnetworkId: integer;
procedure _SetnetworkId(Value: integer);
function _GetpreSharedKey: JString;
procedure _SetpreSharedKey(Value: JString);
function _Getstatus: integer;
procedure _Setstatus(Value: integer);
function _GetwepTxKeyIndex: integer;
procedure _SetwepTxKeyIndex(Value: integer);
function _GetwepKeys: TJavaObjectArray<JString>;
procedure _SetwepKeys(Value: TJavaObjectArray<JString>);
property SSID: JString read _GetSSID write _SetSSID;
property BSSID: JString read _GetBSSID write _SetBSSID;
property allowedAuthAlgorithms: JBitSet read _GetallowedAuthAlgorithms write _SetallowedAuthAlgorithms;
property allowedGroupCiphers: JBitSet read _GetallowedGroupCiphers write _SetallowedGroupCiphers;
property allowedKeyManagement: JBitSet read _GetallowedKeyManagement write _SetallowedKeyManagement;
property allowedPairwiseCiphers: JBitSet read _GetallowedPairwiseCiphers write _SetallowedPairwiseCiphers;
property allowedProtocols: JBitSet read _GetallowedProtocols write _SetallowedProtocols;
property hiddenSSID: boolean read _GethiddenSSID write _SethiddenSSID;
property networkId: integer read _GetnetworkId write _SetnetworkId;
property preSharedKey: JString read _GetpreSharedKey write _SetpreSharedKey;
property priority: integer read _GetnetworkId write _SetnetworkId;
property status: integer read _Getstatus write _Setstatus;
property wepKeys: TJavaObjectArray<JString> read _GetwepKeys write _SetwepKeys;
property wepTxKeyIndex: integer read _GetwepTxKeyIndex write _SetwepTxKeyIndex;
end;
TJWifiConfiguration = class(TJavaGenericImport<JWifiConfigurationClass,
JWifiConfiguration>)
end;
回答1:
You're missing the cdecl
calling convention on all of your JWifiConfiguration
methods.
[JavaSignature('android/net/wifi/WifiConfiguration')]
JWifiConfiguration = interface(JObject)
['{382E85F2-6BF8-4255-BA3C-03C696BC6451}']
function _GetSSID: JString; cdecl;
procedure _SetSSID(Value: JString); cdecl;
function _GetBSSID: JString; cdecl;
procedure _SetBSSID(Value: JString); cdecl;
function _GethiddenSSID: boolean; cdecl;
procedure _SethiddenSSID(Value: boolean); cdecl;
function _GetallowedAuthAlgorithms: JBitSet; cdecl;
procedure _SetallowedAuthAlgorithms(Value: JBitSet); cdecl;
function _GetallowedGroupCiphers: JBitSet; cdecl;
procedure _SetallowedGroupCiphers(Value: JBitSet); cdecl;
function _GetallowedKeyManagement: JBitSet; cdecl;
procedure _SetallowedKeyManagement(Value: JBitSet); cdecl;
function _GetallowedPairwiseCiphers: JBitSet; cdecl;
procedure _SetallowedPairwiseCiphers(Value: JBitSet); cdecl;
function _GetallowedProtocols: JBitSet; cdecl;
procedure _SetallowedProtocols(Value: JBitSet); cdecl;
function _GetnetworkId: integer; cdecl;
procedure _SetnetworkId(Value: integer); cdecl;
function _GetpreSharedKey: JString; cdecl;
procedure _SetpreSharedKey(Value: JString); cdecl;
function _Getstatus: integer; cdecl;
procedure _Setstatus(Value: integer); cdecl;
function _GetwepTxKeyIndex: integer; cdecl;
procedure _SetwepTxKeyIndex(Value: integer); cdecl;
function _GetwepKeys: TJavaObjectArray<JString>; cdecl;
procedure _SetwepKeys(Value: TJavaObjectArray<JString>); cdecl;
property SSID: JString read _GetSSID write _SetSSID;
property BSSID: JString read _GetBSSID write _SetBSSID;
property allowedAuthAlgorithms: JBitSet read _GetallowedAuthAlgorithms write _SetallowedAuthAlgorithms;
property allowedGroupCiphers: JBitSet read _GetallowedGroupCiphers write _SetallowedGroupCiphers;
property allowedKeyManagement: JBitSet read _GetallowedKeyManagement write _SetallowedKeyManagement;
property allowedPairwiseCiphers: JBitSet read _GetallowedPairwiseCiphers write _SetallowedPairwiseCiphers;
property allowedProtocols: JBitSet read _GetallowedProtocols write _SetallowedProtocols;
property hiddenSSID: boolean read _GethiddenSSID write _SethiddenSSID;
property networkId: integer read _GetnetworkId write _SetnetworkId;
property preSharedKey: JString read _GetpreSharedKey write _SetpreSharedKey;
property priority: integer read _GetnetworkId write _SetnetworkId;
property status: integer read _Getstatus write _Setstatus;
property wepKeys: TJavaObjectArray<JString> read _GetwepKeys write _SetwepKeys;
property wepTxKeyIndex: integer read _GetwepTxKeyIndex write _SetwepTxKeyIndex;
end;
来源:https://stackoverflow.com/questions/19890438/create-wificonfiguration-with-delphi-xe5-for-android