2016-07-13 13 views
-2

C++ CLIプロジェクトでイベントでネイティブオブジェクトを呼び出すとき、ネイティブC++からC++/CLI関数を呼び出せるようにしたいこのイベントがトリガーされます。私は現時点で次のコードを持っていますが、PickObjects()がManagedClassのメンバーではないというエラーを返します。静的なC++ CLIメソッドを呼び戻すことは可能ですか?ここでC++から静的C++/CLIメソッドを呼び出す

#pragma once 
#include "Stdafx.h" 
#include "ManagedClass.h" 

namespace Unmanaged 
{ 
    public class EventHandlers 
    { 
    public: 
     static void OnClick(customObject* caller, void *calldata) 
     { 
      //call managed method, can get here from CLI 
      ManagedClass::ManagedObject::PickObjects(); 
     } 
    }; 
} 

はC++ CLIのコードスニペットで、ここではすべてが正常に動作するように見える:

namespace ManagedClass 
{ 
    public ref class ManagedObject 
    { 
    public: 
     static void PickObjects() 
     { 
     //pick stuff when called 
     } 
    }; 
} 

はEDIT:それは働いて手に入れた、エラーは間違いなくファイルをコンパイルする方法のVisual Studioに関連していました。瞬間的にソリューションで更新されます。マティアスが助けてくれてありがとう。

+0

マティアスはすでに言ったように..私たちはあなたが間違って持っているものを推測することはできません...私たちに多くのコードを表示して、[MCVE](http://stackoverflow.com/help/mcve) – nayana

答えて

0

クラスが正しい順序でコンパイルされていないようです。 ManagedClassの最後にEventHandlersクラスを追加することで、作業が完了しました。

namespace ManagedClass 
{ 
    public ref class ManagedObject 
    { 
    public: 
     static void PickObjects() 
     { 
     //pick stuff when called 
     } 
    }; 
    public class EventHandlers 
    { 
    public: 
     static void OnClick(customObject* caller, void *calldata) 
     { 
      ManagedClass::ManagedObject::PickObjects(); 
     } 
    }; 
} 
1

はい、別の静的メソッドから静的メソッドを呼び出すことは可能です。 この場合、ManagedClass::PickObjects()が正しく宣言されていないようです。あなたはそれのコード(ヘッダーは十分であるはずです)を私たちに示すかもしれません。

+0

追加にスニペットを作成してくださいC++ CLIクラスに基づいています。 – DumbQuesionGuy314

+1

コードはよく見えます。コンパイラが宣言を見つけられないような宣言転送はありますか? – Matthias

+0

refはC++/CLIで必要とされ、Microsoftのメモリ管理版C++です。 – DumbQuesionGuy314

関連する問題