#include
int
main(int argc, char *argv[])
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n");
Py_Finalize();
return 0;
}
http://xivilization.net/pydocs/2.6/extending/embedding.html
ICommand library (TextEditorLib.dll)
[assembly:AddinRoot ("TextEditor", "1.0")]
[TypeExtensionPoint]
public interface ICommand
{
void Run ();
}
An add-in (SampleAddin.dll)
[assembly:Addin]
[assembly:AddinDependency ("TextEditor", "1.0")]
[Extension]
class HelloWorldExtension: ICommand
{
public void Run ()
{
Console.WriteLine ("Hello World");
}
}
The host application (TextEditor.exe)
public class Application
{
public static void Main ()
{
AddinManager.Initialize ();
foreach (ICommand cmd in AddinManager.GetExtensionObjects (typeof(ICommand)))
cmd.Run ();
}
}
<Addin id="TextEditor" version="1.0" isroot="true">
<Runtime>
<Import assembly="TextEditor.exe"/>
<Import assembly="TextEditorLib.dll"/>
</Runtime>
<ExtensionPoint path = "/TextEditor/TypeExtensions/ICommand">
<ExtensionNode objectType="ICommand"/>
</ExtensionPoint>
</Addin>
And this could be the manifest for the add-in:
<Addin>
<Runtime>
<Import assembly="SampleAddin.dll"/>
</Runtime>
<Dependencies>
<Addin id="TextEditor" version="1.0" />
</Dependencies>
<Extension path = "/TextEditor/TypeExtensions/ICommand">
<Type type="HelloWorldExtension" />
</Extension>
</Addin>
API виглядає так:
QFutureПрипустимо що нам потрібно порахувати частоту появи слів в декількох документах:mappedReduced(list, mapFunction, reducefunction);
QListmap функція бере документ і повертає хеш із данними про кількість входження кожного слова в документі.list;
QHashmapFunction(const QString &document);
void reduceFunction(QHasht&finalResut, const QHash &intermediateResult);
QFuture<qhashОскільки mappedReduced( ) повертає QFeature є декілька способів синхронізуатися з результатом. Найпростіший спосіб це просто викликати QFuture::result() що заблокує виконання поки результат не буде готовий. Якщо блокування не допустиме (програма має графічний інтерфейс) можна використати сигнал-слот зв'язок щоб відобразити стан обчислень та отримати результат. Також можливо зупинити обчислення QFuture::cancel().>counting = mappedReduced(list, mapFunction, reduceFunction);
import rb
class FloonitzPlugin (rb.Plugin):
def __init__(self):
rb.Plugin.__init__(self)
def activate(self, shell):
print "Hello World"
CompPluginVTable cubeVTable = {
"cube",
"Desktop Cube",
"Place windows on cube",
cubeInit,
cubeFini,
cubeInitDisplay,
cubeFiniDisplay,
cubeInitScreen,
cubeFiniScreen,
0, /* InitWindow */
0, /* FiniWindow */
0, /* GetDisplayOptions */
0, /* SetDisplayOption */
cubeGetScreenOptions,
cubeSetScreenOption,
cubeDeps,
sizeof (cubeDeps) / sizeof (cubeDeps[0])
};
CompPluginVTable *
getCompPluginInfo (void)
{
return &cubeVTable;
}