2009年7月11日土曜日

python - といってもpythonじゃあ出来ないこと多過ぎ

という俺向け


まずVS2008でC++のWin32プロジェクト作成、とりあえず derivation という名前にした。
設定はこのようにする



すると、下記のようなものが含まれたプロジェクトが出来る


// derivation.hの中(上の方のマクロはとりあえず無視)

// このクラスは derivation.dll からエクスポートされました。
class DERIVATION_API Cderivation { // ※1
public:
Cderivation(void);
// TODO: メソッドをここに追加してください。
};

extern DERIVATION_API int nderivation; // ※2

DERIVATION_API int fnderivation(void); // ※3



なんか3つほどサンプルでエクポートされている模様。

この※2と※3のところを、とりあえずpythonタソのために次のように変える

//--------------------
extern "C" DERIVATION_API int nderivation;

extern "C" DERIVATION_API int fnderivation(void);
//--------------------

この変数と関数は何?ということで、一応実装も見てみる。


/// derivation.cpp

// これは、エクスポートされた変数の例です。
DERIVATION_API int nderivation=0;

// これは、エクスポートされた関数の例です。
DERIVATION_API int fnderivation(void)
{
return 42;
}

// これは、エクスポートされたクラスのコンストラクタです。
// クラス定義に関しては derivation.h を参照してください。
Cderivation::Cderivation()
{
return;
}



言うまでも無いが、fndrivation()呼び出すと42が返るようだ

…プロジェクト1文字目は大文字で始めろってことか。
まぁそれは後で作り直すとして、とりあえず Release でいきなりビルドする。当然通る。

すると、プロジェクトフォルダ/Release のなかに 「derivation.dll」 が出来ている。

とりあえず試したい人はこれをどうぞ

こいつを、Blenderのblender.exeがあるディレクトリに突っ込む




で、Blender起動して、Blenderのテキストエディタに


import ctypes

derivation = ctypes.windll.derivation
print derivation.fnderivation()




と入力して実行。



ちなみに、推測だけど、なぜこの関数が42を返すか・・・

多分これじゃないかな?

0 件のコメント: