2012-02-29 13 views
1

私はマネージクラスから使用したいアンマネージドライブラリを持っています。機能のインタフェースは次のとおりです。C++/CLI managed VS.アンマネージドショート

GetProgress(short* value); 

だから、私はマネージクラスに書いた:

short val = 0; 
GetProgress(&val); 

私は次のエラーました:私はthis topicを読んで、私は私を変え

Error C2664: 'GetProgress' : cannot convert parameter 1 from 'cli::interior_ptr' in 'short *' with [ Type=short ]

をコード:

short val = 0; 
pin_ptr<short*> pVal = &val; 
GetProgress(pVal); 

さらに前のエラーに加えて

Error C2440: 'initialisation' : cannot convert from 'short *' to 'cli::pin_ptr' with [ Type=short * ]

どうすればこの問題を解決できますか?

答えて

1

これは興味深いものです。 valのみは、管理型である可能性があるため

次のコードは、C2664を生成します。

using namespace System; 

void GetProgress(short* value) 
{ 
    // unmanaged goodness 
} 

ref class XYZ : System::Object 
{ 
    short val; 

    void foo() 
    { 
     GetProgress(&val); 
    } 
}; 

あなたが最初ローカル変数を宣言する場合は、すべてが正常に動作します...

using namespace System; 

void GetProgress(short* value) 
{ 
    // unmanaged goodness 
} 

ref class XYZ : System::Object 
{ 
    short val; 

    void foo() 
    { 
     short x; 
     GetProgress(&x); 
     val = x; 
    } 
}; 

あなたが探していた答えは正確ではありませんが、単純な修正であるため、私はそれを含めると思っていました。

+0

それだけです。ありがとう! :) – gregseth

関連する問題