在c ++ \ CLI程序集C3767之间使用Directx成员

时间:2014-09-30 22:53:56

标签: c++-cli directx

我试图从另一个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,但我正在寻找更好的解决方案

1 个答案:

答案 0 :(得分:0)

默认情况下,托管C ++程序集不会在其公共接口中导出非托管类型。 LPDIRECT3DDEVICE9是一种非托管类型,因此无论提供哪种访问说明符,您的CreateBuffer方法都将被标记为私有(编译器甚至没有对此生成警告的愚蠢行为)。

使用#pragma make_public或者更好的是,不要在托管接口中使用非托管类型。

建议:如果要在托管代码中使用DirectX,请使用slimDx或Xna。这些库已经为所有东西提供了托管包装器。