【问题标题】:VC++ .net: Functionality from managed DLL is not exportedVC++ .net:未导出托管 DLL 的功能
【发布时间】:2015-08-24 10:41:17
【问题描述】:

我对 .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# 控制台应用程序来测试我的 DLL,将其添加为参考,但我无法访问使用 __declspec(dllexport) 导出的类。对象浏览器中仅显示命名空间。

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    这是

    public ref class BridgedThirdPartyThing
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      相关资源
      最近更新 更多