読者です 読者をやめる 読者になる 読者になる

Haruyuki Mohri

毛利春幸のブログです。

C++Builder(iOS9) - Objective-Cのクラスとメソッドを呼び出す

mojelder.hatenablog.com
Cocoa Touch Static Libraryの作り方(Objective-C) - (Delphi, C++Builder)Haruyuki Mohri

上記で作成した自作Cocoa Touch Static Library(libMo201601Lib.a)をC++Builderで呼び出す

少しズルい方法ですが 以前に作成したuLib_iOSClass.pasを読み込みます。
C++BuilderDelphi両方使える場合この方法が使えます。

uLib_iOSClass.pasを元に自動でhpp生成

uLib_iOSClass.hpp

__interface Mo201601Lib;
typedef System::DelphiInterface<Mo201601Lib> _di_Mo201601Lib;
__interface Mo201601LibClass;
typedef System::DelphiInterface<Mo201601LibClass> _di_Mo201601LibClass;
class DELPHICLASS TMo201601LibClass;
//-- type declarations -------------------------------------------------------
__interface  INTERFACE_UUID("{CFAA0BDC-4AB1-4FB4-B95D-5772A659F30E}") Mo201601Lib  : public Iosapi::Foundation::NSObject 
{
    virtual int __cdecl Addr(int i1, int l2) = 0 ;
    virtual Iosapi::Foundation::_di_NSString __cdecl HelloStr(void) = 0 ;
};

__interface  INTERFACE_UUID("{61D41F11-90E1-420E-8320-C4E15714B847}") Mo201601LibClass  : public Iosapi::Foundation::NSObjectClass 
{
    
};

class PASCALIMPLEMENTATION TMo201601LibClass : public Macapi::Objectivec::TOCGenericImport__2<_di_Mo201601LibClass,_di_Mo201601Lib> 
{
    typedef Macapi::Objectivec::TOCGenericImport__2<_di_Mo201601LibClass,_di_Mo201601Lib>  inherited;
    
public:
    /* TOCImport.Create */ inline __fastcall TMo201601LibClass(void * ID, void * ClsID, Macapi::Objectivec::TOCVTable* VTable) : Macapi::Objectivec::TOCGenericImport__2<_di_Mo201601LibClass,_di_Mo201601Lib> (ID, ClsID, VTable) { }
    /* TOCImport.Destroy */ inline __fastcall virtual ~TMo201601LibClass(void) { }
    
};

このuLib_iOSClass.hppをインクルードするだけです。

#include <Macapi.Helpers.hpp>
#include "uLib_iOSClass.hpp"
//ボタンイベント
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    _di_Mo201601Lib/*System::DelphiInterface<Mo201601Lib>*/ obj1 = TMo201601LibClass::Create(); //newではなくてCreateメソッドを使う。
    int i1 = StrToIntDef(Edit1->Text, 1);
    int i2 = StrToIntDef(Edit2->Text, 2);

    int iRet = obj1->Addr(i1, i2);
    Memo1->Lines->Append(IntToStr(iRet));

    Memo1->Lines->Append(NSStrToStr( obj1->HelloStr() ));

}

Project->C++ リンカ->追加オプションにlibMo201601Lib.aを追加

f:id:mojeld:20160104190435g:plain

Buildと実行

f:id:mojeld:20160104190900g:plain

元ネタ

Team Japan » C++Builder(iOS ARM) - Objective-Cのクラスとメソッドを呼び出す community.embarcadero.com