2012-01-08 3 views
1

長いアルゴリズムを何度も実行する必要があるプログラムを作成しようとしています。そのため、C++は明らかな選択肢のようです。しかし、それを見た目に美しく見せたり、他の関数をより簡単にするために、C#でそれを構築し、C++でアルゴリズムを作りました。PInvokeable DLLを作成するには

私の知る限り、私のC#プログラムでC++関数を使用する最良の方法は、それをPInvokeすることです。私は私のDLLを作ったときしかし、私はDLLから関数のPInvokeしようとすると、私は

"Unable to find an entry point named <name> in DLL"

を言って、エラーを取得し、私は、Visual C++を使用し、Win32コンソールアプリケーション、選択肢の中から選択されたDLLを作成し、 test.cppファイルに関数を作成しました。私は何を間違えたのですか?

+2

C#でアルゴリズムを記述する必要があります。それはあなたがやっていることに依存してうまくいけば、より簡単になり、より速くなる可能性が高いです – SLaks

+0

それは間違いなく高速になりません。私はC#とC++の両方で実行していますが、C++は50倍高速でした(私は9999回実行する必要がありますので、これはあまり驚くことではありません)。 – danielmhanover

+0

C++コードの方が50倍高速である可能性があります。 –

答えて

1
+0

__declspec(dllexport)はどうですか? – danielmhanover

+1

それはうまくいくはずです。 'extern(" C ")'ブロックでラップしてみてください。 Dependency WalkerでDLLを開き、エクスポート名が正しいことを確認します。 – SLaks

+0

'__declspec(dllexport)'、 'extern" C "'(正確な構文に注意してください)と 'cdecl'呼び出し規約を組み合わせると、意図した名前で関数がエクスポートされます。反対に、 'DllImport'を実行するときは、' CallingConvention = CallingConvention.Cdecl'を必ずセットしなければなりません。 –