×
Namespaces

Variants
Actions

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.
105 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×