我试图从另一个C ++ / CLI程序集调用成员函数,但是当我开始使用DirectX结构时,我得到C3767错误:候选函数不是accessib
来自Utilities.dll的
#pragma once
#include "define.h"
namespace Utilities
{
public ref class Data
{
public:
BOOL CreateBuffer( LPDIRECT3DDEVICE9 dev)
{
...
return TRUE;
}
{
}
从渲染器中使用它
#include "Renderer.h"
namespace SomeNamespace
{
SceneRenderer::SceneRenderer(void)
{
}
void SceneRenderer::Render(LPDIRECT3DDEVICE9 dev)
{
...
m_vbo->CreateBuffer(dev); //error C3767: 'Utilities::Data::CreateBuffer': candidate function(s) not accessible
...
}
}
我知道使用设备int *(& dev)的地址我可以回流到LPDIRECT3DDEVICE9,但我正在寻找更好的解决方案
答案 0 :(得分:0)
默认情况下,托管C ++程序集不会在其公共接口中导出非托管类型。 LPDIRECT3DDEVICE9是一种非托管类型,因此无论提供哪种访问说明符,您的CreateBuffer方法都将被标记为私有(编译器甚至没有对此生成警告的愚蠢行为)。
使用#pragma make_public
或者更好的是,不要在托管接口中使用非托管类型。
建议:如果要在托管代码中使用DirectX,请使用slimDx或Xna。这些库已经为所有东西提供了托管包装器。