2011-01-27 20 views
0

Carbonの関数アドレスまたはクラス名からバンドルリファレンス(CFBundleRef)を取得することは可能ですか?私は関数はObjective-CのファンクションアドレスまたはクラスからCFBundleRefを見つける方法

NSBundle myBundle = [NSBundle bundleForClass:(Class)<SOME_CLASS>]; 

とWindows API

GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)<SOME_FUNCTION>, &outModule); 

である知っている

は、類似したものまたはMac上のC++と他の方法はあります?

ありがとう、 Abhinay。

答えて

2

あなたが与えられた関数名をエクスポートするバンドルにバンドルの参照を取得するためにCore Foundation functions that operate on CFBundleを使用することができます。

CFStringRef functionName = CFSTR("someFunctionName"); 
CFArrayRef allBundles = CFBundleGetAllBundles(); 
CFIndex i; 
CFIndex bundleCount = CFArrayGetCount(allBundles); 

for (i = 0; i < bundleCount; i++) { 
    CFBundleRef bundle = CFArrayGetValueAtIndex(allBundles, i); 
    void *functionPointer = CFBundleGetFunctionPointerForName(bundle, functionName); 
    if (functionPointer != NULL) { 
     // bundle points to a bundle that exports functionName 
    } 
} 

、バンドル内の指定されたシンボル名にCFBundleGetDataPointerForName()戻りデータポインタ以来、Iクラスが_OBJC_CLASS_$_<className>というシンボル名でエクスポートされているので、それはクラス名にも使用できると信じています。 _OBJC_CLASS_$_NSArray

私が知る限り、関数アドレスを指定してバンドルが関数をエクスポートするかどうかを検査する機能はありません。

関連する問題