如何在 C++ 中为子类创建指针?
How to create pointers for subclasses in C++?
我在指向 API 的子类时遇到了一些麻烦。
这是我要执行的操作的原始 pascal 代码:
Adapter:=TJBluetoothAdapter.JavaClass.getDefaultAdapter;
remoteDevice:=Adapter.getRemoteDevice(stringtojstring(targetMACAddress));
sock:=remoteDevice.createRfcommSocketToServiceRecord(UID);
它的缩小版:
sock:=TJBluetoothAdapter.JavaClass.getDefaultAdapter.getRemoteDevice(stringtojstring(targetMACAddress)).createRfcommSocketToServiceRecord(UID);
这里有我已经尝试过的东西:
_di_JBluetoothSocket* sock = new _di_JBluetoothSocket;
sock = &TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid);
和:
TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid)* sock;
和:
TJBluetoothAdapter* sock;
sock = TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid);
但是编译时总是报错,怎么办?
从现在开始,感谢您的建议。
您未正确声明 sock
变量。不要声明指向 _di_...
class 类型的指针。它已经一个指针(更具体地说,它是 System::DelphiInterface
class, which is a C++ smart pointer 围绕 Delphi 接口指针的包装器的类型定义)。
_di_JBluetoothAdapter Adapter = TJBluetoothAdapter::JavaClass->getDefaultAdapter();
_di_JBluetoothDevice remoteDevice = Adapter->getRemoteDevice(StringToJString(targetMACAddress));
_di_JBluetoothSocket sock = remoteDevice->createRfcommSocketToServiceRecord(UID);
大致相当于:
JBluetoothAdapter *Adapter = TJBluetoothAdapter::JavaClass->getDefaultAdapter();
Adapter->AddRef();
JBluetoothDevice *remoteDevice = Adapter->getRemoteDevice(StringToJString(targetMACAddress));
remoteDevice->AddRef();
JBluetoothSocket *sock = remoteDevice->createRfcommSocketToServiceRecord(UID);
sock->AddRef();
...
sock->_Release();
remoteDevice->_Release();
Adapter->_Release();
我在指向 API 的子类时遇到了一些麻烦。
这是我要执行的操作的原始 pascal 代码:
Adapter:=TJBluetoothAdapter.JavaClass.getDefaultAdapter;
remoteDevice:=Adapter.getRemoteDevice(stringtojstring(targetMACAddress));
sock:=remoteDevice.createRfcommSocketToServiceRecord(UID);
它的缩小版:
sock:=TJBluetoothAdapter.JavaClass.getDefaultAdapter.getRemoteDevice(stringtojstring(targetMACAddress)).createRfcommSocketToServiceRecord(UID);
这里有我已经尝试过的东西:
_di_JBluetoothSocket* sock = new _di_JBluetoothSocket;
sock = &TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid);
和:
TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid)* sock;
和:
TJBluetoothAdapter* sock;
sock = TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid);
但是编译时总是报错,怎么办? 从现在开始,感谢您的建议。
您未正确声明 sock
变量。不要声明指向 _di_...
class 类型的指针。它已经一个指针(更具体地说,它是 System::DelphiInterface
class, which is a C++ smart pointer 围绕 Delphi 接口指针的包装器的类型定义)。
_di_JBluetoothAdapter Adapter = TJBluetoothAdapter::JavaClass->getDefaultAdapter();
_di_JBluetoothDevice remoteDevice = Adapter->getRemoteDevice(StringToJString(targetMACAddress));
_di_JBluetoothSocket sock = remoteDevice->createRfcommSocketToServiceRecord(UID);
大致相当于:
JBluetoothAdapter *Adapter = TJBluetoothAdapter::JavaClass->getDefaultAdapter();
Adapter->AddRef();
JBluetoothDevice *remoteDevice = Adapter->getRemoteDevice(StringToJString(targetMACAddress));
remoteDevice->AddRef();
JBluetoothSocket *sock = remoteDevice->createRfcommSocketToServiceRecord(UID);
sock->AddRef();
...
sock->_Release();
remoteDevice->_Release();
Adapter->_Release();