2015-04-06 41 views
0

当我指向一个API的子类时,我遇到了一些麻烦。如何在C++中为子类创建指针?

这里是什么我试图做原来的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); 

compilling时,不过,我总是得到错误,我应该怎么办? 从现在起,感谢您的建议。

+1

你什么错误?忽略这一点并不是很有帮助。 – tadman

+0

这是哪一种语言?在C++语言中没有':='操作符。也许BNF? –

+0

正如我在问题中所说的,第一个和第二个片段最初是Pascal – mauroaraujo

回答

1

您声明正确地显示您的sock变量。不要声明类型为_di_...的指针。它已经是一个指针(更具体地说,它是一个System::DelphiInterface类的typedef,它是Delphi接口指针的C++ smart pointer包装器)。

_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();