从 C++ 调用静态 C++/CLI 方法
Call a static C++/CLI method from C++
在 C++CLI 项目中,我在事件上调用本机对象,我希望能够在触发此事件时从本机 C++ 调用 C++/CLI 函数。我目前有以下代码,但它 returns PickObjects() 不是 ManagedClass 的成员的错误。是否可以回调到静态 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
}
};
}
编辑:成功了,错误肯定与 Visual Studio 编译文件的方式有关。将立即更新解决方案。感谢 Matthias 的帮助。
是的,可以从另一个静态方法中调用一个静态方法。
在这种情况下,听起来您没有正确声明 ManagedClass::PickObjects()
。您可以向我们展示它的代码(header 应该足够了)。
似乎 classes 没有按照正确的顺序编译。将 EventHandlers class 添加到 ManagedClass 的末尾,一切正常。
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();
}
};
}
在 C++CLI 项目中,我在事件上调用本机对象,我希望能够在触发此事件时从本机 C++ 调用 C++/CLI 函数。我目前有以下代码,但它 returns PickObjects() 不是 ManagedClass 的成员的错误。是否可以回调到静态 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
}
};
}
编辑:成功了,错误肯定与 Visual Studio 编译文件的方式有关。将立即更新解决方案。感谢 Matthias 的帮助。
是的,可以从另一个静态方法中调用一个静态方法。
在这种情况下,听起来您没有正确声明 ManagedClass::PickObjects()
。您可以向我们展示它的代码(header 应该足够了)。
似乎 classes 没有按照正确的顺序编译。将 EventHandlers class 添加到 ManagedClass 的末尾,一切正常。
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();
}
};
}