symbian下面制作DLL 的流程
首先咱们假设要封装一个叫做CMyClass的东西。先丛工程文件入手:
MyClass.mmp
-------------------
代码:
TARGET MyClass.dll
TARGETTYPE dll
UID 0x1000008d 0x10004268 //注意,这里换上你的UID
SOURCEPATH ../src
SOURCE MyClass.cpp
SYSTEMINCLUDE .
SYSTEMINCLUDE /epoc32/include
SYSTEMINCLUDE /epoc32/include/libc
LIBRARY euser.lib
#if defined(WINS)
deffile ./MyClassWINS.def
#else if defined(ARM)
deffile ./MyClassARM.def
#endif
NOSTRICTDEF
EXPORTUNFROZEN
好,一半已经搞定了,再坚持一下。
MyClass.h
--------------
代码:
class CMyClass : public CBase
{
public: // 这些IMPORT_C开头的家伙就是我们可以从别的程序中调用的函数
IMPORT_C static CMyClass* NewL();
IMPORT_C static CMyClass* NewLC();
IMPORT_C ~CMyClass();
public:
IMPORT_C void DoSomething();
private:
CMyClass();
void ConstructL();
};
很晚了,我偷个懒,上面的代码只写了重要的部分,那些个#include什么的麻烦看官们自己补齐吧。
MyClass.cpp
-----------------
代码:
// DLL Entry Point。这是最重要的东西,别忘了哦,每个DLL都需要它。
GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
{
return(KErrNone);
}
EXPORT_C void CMyClass::DoSomething()
{
// 好,我承认,这个函数也许应该叫做DoNothing才对。:-)
return ETrue;
}
EXPORT_C CMyClass* CMyClass::NewL()
{
CMyClass* self = NewLC();
CleanupStack::Pop(self);
return self;
}
...
其实大家注意到了,问题关键就在这对IMPORT_C...EXPORT_C上。这些函数就是你的DLL所定义的API接口!
好了,基本完成了,我们编译它!abld build wins udeb
编译结束后,你会在epoc32的那堆目录下找到一个MyClass.lib以及生成的DLL! 是的,就这么简单![/