想象一下,如果你愿意的话,一个包含两个程序的Mac OS X .app包:一个包含返回NSApplicationMain()的Cocoa main(),另一个包含具有自己的main()的Carbon可执行文件的包。 / p>
Cocoa应用程序用于注册/激活。我们不想将它们分成两个应用程序。我想从INSIDE Cocoa main()开始执行Carbon main()。假设所有代码都已正确签名,则使用" main()"在相同的应用程序包中允许,以及如何从Cocoa代码中启动Carbon main()?
答案 0 :(得分:0)
我自己并没有真正回答这个问题:Apple DTS的传奇人物Eric Schlegel传达了一些额外的考虑因素,因此我将其发布在其他可能希望遵循我不同寻常的脚步的人身上:
我认为这不会按照您希望的方式运作。一旦 Cocoa应用程序已运行其事件循环并在窗口中注册 服务器,该进程将被标记为Cocoa应用程序。你可能会 如果你试图完全运行碳,就会遇到奇怪的行为 事件循环和窗口层次结构,因为操作系统中的所有内容都是 认为你有一个Cocoa应用程序,即使你真的只是使用 碳
在这种情况下,您最好只启动主要的Carbon应用程序 一个单独的过程。
话虽如此,我认为实际上没有任何特别之处 难以加载单独的Carbon包并运行它。 你只需使用NSBundle或CFBundle通过URL加载包,得到一个 来自bundle的函数指针用于导出的main()函数,和 叫它。你去吧。
但是 - CFBundleGetFunctionPointerForName(myBundle,CFSTR(“_ main”))和CFBundleGetFunctionPointerForName(myBundle,CFSTR(“main”))都不能处理Carbon .app Mach-o二进制文件 - 它会返回此错误:
.asciz