×
Namespaces

Variants
Actions
Revision as of 09:06, 15 December 2011 by hamishwillee (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Open C引入的新类型(TARGETTYPE)

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
twu 在 21 Aug 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

随着Open C/C++的引入到Symbian/S60中,有两个新的目标类型(TARGETTYPE),STDEXE和STDDLL也被定义到系统中。这样做直接的好处就是简化了C/C++到Symbian/S60上的移植步骤。

具体来说,对于DLL类型的移植,可以省去在头文件和源码中添加宏IMPORT_C,EXPORT_C以输出用于外部连接的函数和数据。对于EXE类型的移植,随着STDEXE类型的使用,开发者可以直接使用main()作为程序的入口,并正常带有参数而不必再担心Symbian/S60编译器不能识别。

以上这些的好处是开发者可以减少移植的工作量,同时相对的减少了出错的几率。

在实际移植中,应用新类型的步骤很简单。完整的例子已经附在本文后面,所使用的例子是从S60 v3 fp2 v1.1中例子opencbasicdll修改过的。已在Carbide中编译测试过。下面的部分演示一下所修改的部分。

首先,对于STDEXE和STDDLL,所分配的UID2是0x20004c45

主要的变化是在工程文件mmp中,如下

...
//for STDDLL
 
TARGET opencdll.dll
 
//TARGETTYPE dll
TARGETTYPE stddll
 
//UID 0x1000008d 0xA0001313
UID
... 0x20004C45 0xA0001313
...
//for STDEXE
 
TARGET opencbasicdllclient.exe
 
//TARGETTYPE exe
TARGETTYPE STDEXE
 
//UID 0x100039CE 0xA000131A
UID 0x20004C45 0xA000131A
 
// Using main() as entry point, commented out if use STDEXE
//STATICLIBRARY libcrt0.lib
...

另外,通过下面的例子可以看到所省略工作

...
//opencbasicdll.h
 
//IMPORT_C void strrev(char *s);
void strrev(char *s);
 
//IMPORT_C void wstrrev(wchar_t *s);
void wstrrev(wchar_t *s);
...
...
//opencbaiscdll.cpp
 
//EXPORT_C void strrev(char *s)
void strrev(char *s)
{
}
 
//EXPORT_C void wstrrev(wchar_t *s)
void wstrrev(wchar_t *s)
{
}
...

需要额外说的是,openc所需的库文件已经被包括了,不需要在mmp中列出。只要包括路径:

${EPOCROOT}epoc32/include/stdapis as the default path for header files.

对于开源代码的文件后缀,编译系统可以支持除了标准C++的后缀外,还包括.cc, .cxx。

需要指出的是,在写此文时(2008.8.21),因为公开的SDK存在错误,还无法完全支持STDEXE和STDDLL。我们内部所使用的SDK补丁会尽快向大家公布。

This page was last modified on 15 December 2011, at 09:06.
117 page views in the last 30 days.
×