锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
ipd 鐨勬牸寮忓彲浠ュ湪 http://na.blackberry.com/eng/developers/resources/journals/jan_2006/ipd_file_format.jsp 榪欓噷鎵懼埌, 鍚庨潰鏄唬鐮? 鍙槸鐢熸垚datablock 鍒楄〃, 榪橀渶瑕侀澶栨嫹璐? 鎿嶄綔鏃舵渶濂藉彧鍚屾閫氫俊褰?
涓嬮潰鏄唬鐮?
#-*- coding: gbk -*-
from struct import *
class BBFile:
def __init__(self):
pass
def _contactblock(self, name, phone, uid):
s = ''
# name
name = name.encode("utf-16be")
s += pack('<HB', len(name)+1, 0xa0)
s += pack('<B', 0x01) + name
# ff * 8
s += pack('<HB', 8, 0x54)
s += '\xff'*8
# uid
s += pack('<HBI', 4, 0x55, uid)
# phone
phone = phone.encode("gbk")
s += pack('<HB', len(phone)+1, 0x08)
s += phone + '\x00'
return s
def save(self, filename, us, dbID=0, dbVer=0):
hf = open(filename, "w+b")
rs, uid = 1, 363797835 # 鍒濆鍊?/span>
for u in us:
s = self._contactblock(u[0], u[1], uid)
h = pack('<HIBHI', dbID, len(s)+7, dbVer, rs, uid)
hf.write(h + s)
uid += 8 #
rs += 1 #
hf.close()
if __name__=='__main__':
bb = BBFile()
us = [ (u'瀹濆疂1', u'13888888888'),(u'瀹濆疂2', u'13888888888'),(u'瀹濆疂3', u'13888888888'), ]
bb.save("bb.ipd", us, 0, 0)
2. 濡傛灉瑕佺湡鐨勭敓鎴愬彲浠ュ鍏b 鐨勬枃浠剁殑璇? 瑕佷嬌鐢ㄩ珮綰?> 鍙悓姝ラ氳褰? 鐒跺悗灝嗚繖涓枃浠剁敓鎴愮殑鍐呭鏀懼湪瀵煎嚭鏂囦歡鐨勫ご鐨勫悗闈? 榪樻槸鏈夌偣楹葷儲.... 鏈夌┖鍋氫釜鍏ㄨ嚜鍔ㄧ殑 鍛靛懙
鍥犱負(fù)鍙槸嫻嬭瘯, 鎵浠ュ緢澶氱‖緙栫爜浜?)
]]>
浠婂ぉ鍦╟++ 涓瘯鐫宓屽叆 python 浠g爜 (紺轟緥浠g爜鍦?Python-2.5.2\Demo\embed\ 涓?
鍦ㄨ繍琛屾椂鍙兘浼?xì)漶旂敓绫讳?'import site' failed; use -v for traceback 鐨勯敊璇? 鍘熷洜鏄痯ython 鍦╥mport module 鐨勬椂鍊欑殑璺緞闂. 鏈?縐嶆柟娉曞彲浠ヨВ鍐?浠ュ墠閫氳繃璁劇疆鐜鍙橀噺 PYTHONPATH 濂藉儚鍦?.5 宸茬粡鏃犳晥浜?.
0. 鍙栨秷娉ㄩ噴 Py_NoSiteFlag = 1;
榪欎釜鍙槸鍙栨秷import site , 褰撶劧濡傛灉鍦ㄤ唬鐮佷腑瑕乮mport 鍟ョ殑璇? 榪樻槸浼?xì)鍑虹幇閿欒鐨?
a. 璁劇疆鐜鍙橀噺 PYTHONHOME = D:\usr\Python
b. 鍦ㄨ皟鐢?Py_Initialize 涔嬪墠璋冪敤鍑芥暟
Py_SetPythonHome("D:\\usr\\Python"); // 鍙傛暟鏄痯ython 鐨勫畨瑁呯洰褰?
2. 鍏朵粬涓浜涙湁鐢ㄧ殑璧勬簮
Python/C API Reference Manual (API 鍙傝? , Extending and Embedding the Python Interpreter (鎵╁睍鍙婂祵鍏ython瑙i噴鍣? 涓昏璇存槑浜嗗浣曟墿灞昉ython, 緇橮ython 鍐欐墿灞? 鍏朵腑 5. Embedding Python in Another Application 涓绔犺榪頒簡鍦–++涓祵鍏?璋冪敤Python 浠g爜 )
浣跨敤C/C++鎵╁睍Python 瀵規(guī)枃 Extending and Embedding the Python Interpreter 浣滀簡綺劇畝, 寰堜笉閿欑殑涓綃囨枃绔? 浣嗘槸璺寵繃浜嗕竴浜涘熀紜 .
Building Hybrid Systems with Boost.Python 浠嬬粛浜嗕嬌鐢╞oost.python 鏂逛究python 鎻掍歡寮鍙? python緇戝畾c++紼嬪簭 鏄叾涓枃鐗堟湰.
Embedding Python in Multi-Threaded C/C++ Applications 璁蹭簡c++鍦ㄥ綰跨▼鐜濡備綍浣跨敤Python , 鏂?nbsp;C++澶氱嚎紼嬩腑璋冪敤python api鍑芥暟 鎻愪緵浜嗕竴涓綰跨▼鐨勫皝瑁?
SCXX - A Simple Python/C++ API
http://davidf.sjsoft.com/mirrors/mcmillan-inc/scxx.html
C++鎵╁睍鍜屽祵鍏ython搴旂敤 (浠嬬粛浜嗕竴浜汸ython/C API 鍑芥暟, 浠ュ強ext 渚嬪瓙, 涓鑸埇)
http://hi.baidu.com/yunsweet/blog/item/20b08aeebaa2b1282cf534c7.html
3. Python 澶氱嚎紼嬬殑浣跨敤
zz http://blog.csdn.net/liguangyi/archive/2007/06/20/1659697.aspx
浠婂ぉ鐪嬩簡榪戜竴澶╁叧浜庡綰跨▼鐨勫簲鐢ㄤ腑錛屽浣曞畨鍏ㄨ皟鐢╬ython鏂歸潰鐨勮祫鏂欙紝寮濮嬬殑鏃跺欑湅鐨勭畝鐩村ご澶у鏂楋紝琚玴ython璇█鐨勫叏灞閿?Global Interpreter Lock)銆佺嚎紼嬬姸鎬?Thread State )絳夐兘鏈夌偣緇曟檿浜嗭紝鍚庢潵緇忚繃鍚勬柟闈㈡枃绔犲拰甯姪鏂囨。鐨勭浉浜掑弬鑰冿紝鍙戠幇瀵逛簬2.4/2.5鐗堟湰錛屾彁渚涗簡PyGILState_Ensure, PyGILState_Release錛屽搸錛岃繖涓嬪彲鏂逛究澶у彂浜嗐?/p>
涓銆侀鍏堝畾涔変竴涓皝瑁呯被錛屼富瑕佹槸淇濊瘉PyGILState_Ensure, PyGILState_Release閰嶅浣跨敤錛岃屼笖榪欎釜綾繪槸鍙互宓屽浣跨敤鐨勩?/p>
#include <python.h>
class PyThreadStateLock
{
public:
PyThreadStateLock(void)
{
state = PyGILState_Ensure( );
}
~PyThreadStateLock(void)
{
PyGILState_Release( state );
}
private:
PyGILState_STATE state;
};
浜屻佸湪涓葷嚎紼嬩腑錛岃繖鏍峰鐞?/p>
// 鍒濆鍖?br> Py_Initialize();
// 鍒濆鍖栫嚎紼嬫敮鎸?br> PyEval_InitThreads();
// 鍚姩瀛愮嚎紼嬪墠鎵ц錛屼負(fù)浜嗛噴鏀綪yEval_InitThreads鑾峰緱鐨勫叏灞閿侊紝鍚﹀垯瀛愮嚎紼嬪彲鑳芥棤娉曡幏鍙栧埌鍏ㄥ眬閿併?br> PyEval_ReleaseThread(PyThreadState_Get());
// 鍏朵粬鐨勫鐞嗭紝濡傚惎鍔ㄥ瓙綰跨▼絳?br> ......
// 淇濊瘉瀛愮嚎紼嬭皟鐢ㄩ兘緇撴潫鍚?br> PyGILState_Ensure();
Py_Finalize();
// 涔嬪悗涓嶈兘鍐嶈皟鐢ㄤ換浣昿ython鐨凙PI
涓夈佸湪涓葷嚎紼嬶紝鎴栬呭瓙綰跨▼涓紝璋冪敤python鏈韓鍑芥暟鐨勯兘閲囩敤濡備笅澶勭悊
{
class PyThreadStateLock PyThreadLock;
// 璋冪敤python鐨凙PI鍑芥暟澶勭悊
......
}
鍛靛懙錛岀湅榪欐牱鏄惁闈炲父綆鍗曚簡銆?/p>
鍙﹀榪樻湁涓や釜鍜屽叏灞閿佹湁鍏崇殑瀹忥紝Py_BEGIN_ALLOW_THREADS 鍜?Py_END_ALLOW_THREADS銆傝繖涓や釜瀹忔槸涓轟簡鍦ㄨ緝闀挎椂闂寸殑C鍑芥暟璋冪敤鍓嶏紝涓存椂閲婃斁鍏ㄥ眬閿侊紝瀹屾垚鍚庨噸鏂拌幏鍙栧叏灞閿侊紝浠ラ伩鍏嶉樆濉炲叾浠杙ython鐨勭嚎紼嬬戶緇繍琛屻傝繖涓や釜瀹忓彲浠ヨ繖鏍瘋皟鐢?/p>
{
class PyThreadStateLock PyThreadLock;
// 璋冪敤python鐨凙PI鍑芥暟澶勭悊
......
Py_BEGIN_ALLOW_THREADS
// 璋冪敤闇瑕侀暱鏃墮棿鐨凜鍑芥暟
......
Py_END_ALLOW_THREADS
// 璋冪敤python鐨凙PI鍑芥暟澶勭悊
......
}
4. 鍙兘鐨勯敊璇強瑙e喅
a. 鍦╲s 200x 涓?debug 妯″紡鍑虹幇閾炬帴闂
extmodule.obj : error LNK2019: unresolved external symbol __imp___Py_Dealloc referenced in function _PySwigObject_format
extmodule.obj : error LNK2019: unresolved external symbol __imp___Py_NegativeRefcount referenced in function _PySwigObject_format
extmodule.obj : error LNK2001: unresolved external symbol __imp___Py_RefTotal
extmodule.obj : error LNK2019: unresolved external symbol __imp___PyObject_DebugFree referenced in function _PySwigObject_dealloc
extmodule.obj : error LNK2019: unresolved external symbol __imp___PyObject_DebugMalloc referenced in function _PySwigObject_New
extmodule.obj : error LNK2019: unresolved external symbol __imp__Py_InitModule4TraceRefs referenced in function _init_extmodule
涓昏鏄洜涓?Py_DEBUG/Py_TRACE_REFS 寮曡搗, 淇敼 Python\include 涓嬬殑 pyconfig.h, object.h 涓や釜鏂囦歡灝辮浜?... 璇﹁ http://www.nabble.com/link-error-in-debug-mode-td3126668.html
"|
Command-Line Option |
Description |
|---|---|
|
|
The default is to register the COM objects. |
|
|
Unregisters the objects. This removes all references to the objects from the Windows registry. |
|
|
Registers the COM servers in debug mode. We discuss debugging COM servers later in this chapter. |
|
|
Register (or unregister) the object quietly (i.e., don't report success). |
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}]
@="PythonDemos.Utilities"
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\Debugging]
@="0"
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\Implemented Categories]
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}]
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\InprocServer32]
@="pythoncom25.dll"
"ThreadingModel"="both"
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\LocalServer32]
@="D:\\usr\\Python\\pythonw.exe \"D:\\usr\\Python\\lib\\site-packages\\win32com\\server\\localserver.py\" {41E24E95-D45A-11D2-852C-204C4F4F5020}"
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\ProgID]
@="PythonDemos.Utilities"
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\PythonCOM]
@="PythonDemos.PythonUtilities"
[HKEY_CLASSES_ROOT\CLSID\{41E24E95-D45A-11D2-852C-204C4F4F5020}\PythonCOMPath]
@="D:\\"

<?php
$com = new COM("PythonDemos.Utilities");
$rs = $com->SplitString("a b c");
foreach($rs as $r)
echo $r."\n";
?>
from distutils.core import setup
import py2exe 
import sys
import shutil 
# Remove the build tree
ALWAYS do that!
shutil.rmtree("build", ignore_errors=True) 
# List of modules to exclude from the executable
excludes = ["pywin", "pywin.debugger", "pywin.debugger.dbgcon", "pywin.dialogs", "pywin.dialogs.list"] 
# List of modules to include in the executable
includes = ["win32com.server"] 
# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
try:
# if this doesn't work, try import modulefinder
import py2exe.mf as modulefinder
import win32com
for p in win32com.__path__[1:]:
modulefinder.AddPackagePath("win32com", p)
for extra in ["win32com.shell", "win32com.server"]: #,"win32com.mapi"
__import__(extra)
m = sys.modules[extra]
for p in m.__path__[1:]:
modulefinder.AddPackagePath(extra, p) 
except ImportError:
# no build path setup, no worries.
pass 
# Set up py2exe with all the options
setup(
options = {"py2exe": {"compressed": 2,
"optimize": 2,
#"bundle_files": 1,
"dist_dir": "COMDist",
"excludes": excludes,
"includes": includes}},
# The lib directory contains everything except the executables and the python dll.
# Can include a subdirectory name.
zipfile = None,
com_server = ['PythonDemos'], # 鏂囦歡鍚?!
) 