VC ++ .net:不导出托管DLL的功能

时间:2015-06-09 14:28:32

标签: c# c++ visual-c++ dll

我是.NET平台的新手(来自JVM并具有一些有限的C / C ++经验)并尝试我的第一个托管C ++类库。这是作为我获得的第三方DLL的桥梁,我必须接口。我尝试使用BridJ和Java但到目前为止没有成功,所以我现在正在尝试编写在C#中使用第三方DLL的程序。

第三方DLL是非托管C ++。

我的ManagedBridge.h到目前为止看起来与此类似:

#pragma once

#include "thirdparty.h"

using namespace System;

namespace ManagedBridge {

    class __declspec(dllexport) BridgedThirdPartyThing {

    private:
        THIRDPARTYNS::ThirdPartyThing* _delegate;

    public:
        BridgedThirdPartyThing();

        ~BridgedThirdPartyThing();

        void foo();

        // more methods
    };
}

我的ManagedBridge.cpp到目前为止看起来像这样:

#include "stdafx.h"
#include "ManagedBridge.h"

namespace ManagedBridge {

    BridgedThirdPartyThing::BridgedThirdPartyThing() {
        _delegate = new THIRDPARTYNS::ThirdPartyThing();
    }

    BridgedThirdPartyThing::~BridgedThirdPartyThing() {
        delete _delegate;
    }

    void BridgedThirdPartyThing::foo() {
        _delegate -> foo();
    }

    // similar for the other methods
}

}

现在,当我构建它时,我没有错误,并且创建了ManagedBridge.dll

然后我创建了一个C#Console应用程序来测试我的DLL,添加它作为参考,但是我无法访问我用__declspec(dllexport)导出的类。只有命名空间显示在对象浏览器中。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

这是

public ref class BridgedThirdPartyThing

用于C ++ / CLI。您不使用__declspec(dllexport)。请注意,类必须是公共的才能对comsuming程序集可见。