2

dllでファイルを作成し、これを使用して関数を作成visual studio 2010しようとしていますが、次のエラーが発生します。dllPostgreSQL 9.1

ERROR:  incompatible library "D:\visual_studio\DynamicLibrary\x64\Debug\funxx.dll":    
 missing magic block

HINT:  Extension libraries are required to use the PG_MODULE_MAGIC macro.

私は言語関数と動的ローディングについて64bits windows.iのドキュメントをチェックして使用しています、そしてそれは言いますPostgreSQLC

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif 

に含める必要がありますが、互換性dynamic loadingについては何も述べていません。C++この問題に対処する方法を知っている人はいPostgreSQLますか?Windows環境でC ++を使用して関数を作成するためにそのエラーを削除するにはどうすればよいですか?

4

1 に答える 1

3

Casまたは as としてコンパイルしましたC++か? 使用した場合は、 C++ での拡張機能の記述に従って、ブロックでC++ラップする必要があります。PG_MODULE_MAGICextern "C"

可能な限り、plain と記述して plaincとしてコンパイルするだけcで、C++ は除外してください。C++ コードを PostgreSQL に混在させるのは複雑で難しいため、初心者にとっては良いことではありません。

絶対に C++ を使用する必要がある場合は、C++ でコードを記述extern "C"し、不透明なvoidポインターまたは空の構造体型へのポインターとして C++ オブジェクトがやり取りされるインターフェイスを公開します。次に、公開した純粋なcインターフェースを使用して、Pg モジュールを記述します。そのようなラッパーを作成するのに役立つSWIGのようなツールがありますが、通常、Pg モジュールのようなものには必要ありません。

Pg モジュールで C++ を直接使用することは注意して行うことができますが、Pglongjmpベースのエラー処理では、呼び出してエラーが発生した場合、スタックPg -> C++ -> Pg完全に破棄されます。真剣に、それをしないでください。C++ を分離したままにします。

于 2012-09-27T00:19:29.150 に答える