2012-05-02 7 views
0

SQL Server 2008 R2 CLR SPで使用したいC++(www.NR.com関数)のコードがいくつかあります。 C#でラッパーを作ろうとしましたが、運はありません。おそらく、誰かがそのようなラッパーを作成し、必要なすべてのコンパイラ/リンカーオプションを設定するための作業サンプルまたはマニュアルを持っているでしょうか?アンマネージドコードを使用したCLR SP

おかげ

+0

答えはありませんが、[ヒント](http://social.msdn.microsoft.com/Forums/en/sqlnetfx/thread/4a032c4b-1402-4c53-b34e-8c8bd724f904)、多分です。 –

答えて

3

MSDN持ってネイティブコードからパラメータ管理の.NETへのマーシャルへのすべての情報

http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx

http://msdn.microsoft.com/en-us/library/z6cfh6e6(v=vs.71).aspx

この記事は、アンマネージコードを消費する方法を説明します(C++のクラス)

http://www.codeguru.com/cpp/cpp/cpp_managed/interop/article.php/c6867/Consuming-Unmanaged-C-Class-Libraries-from-NET-Clients.htm

64ビットネイティブコードのキャッチがあります(この記事では、amd64が実際に普及する前であるため、この記事では触れていません)。リンカのパラメータは微調整する必要があり、試行錯誤だけでこれを行いました。

2番目の考えでは、NR.comのものはさらに簡単です。 必要なすべての機能を持つ.DLLを作成することができます。これはP/Invokeと呼ばれ、前述のC++/CLIソリューションよりも簡単です。

基本的には、

extern "C" void do_something_with_numbers(double* array, int len); 

のようなCコードのためにエクスポートされたこの機能でWrapper.DLLを作成します。

そして、C#であなただけの

class MyNRWrapper 
{ 
    [DllImport("WrapperDLL.dll", EntryPoint="do_something_with_numbers")] 
    public static extern void DoSomething([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] double [] array, int size); 
}; 

を宣言あなたが経験している問題はDLLにあなたがにextern「C」として関数を宣言するのを忘れているという事実から来ているかもしれないと、彼らはC++コンパイラによってマングルさになります。 CFF Explorerツールを使用し、Wrapper.DLLのExportセクションで実際にエクスポートする関数があるかどうかを確認してください。名前が変更されている場合は、extern "C"修飾子を追加するか、C#のEntryPoint名を変更します。

+1

Viktorさん、ありがとうございました。 –

関連する問題