.net 中的静态链接是不可能的吗?你能用 C++/CLI 写一个包装器吗?

Ale*_*tta 5 .net c++ dll reference nvidia

我正在处理一个 VB.Net 项目,我需要在其中加载 Nvidia 的 API NvApi.lib。但是在Nvidia网站上它说:

“NvAPI 不能动态链接到应用程序。您必须创建到库的静态链接,然后调用 NvAPI_Initialize(),它会动态加载 nvapi.dll。”

我的理解是 .Net 不支持静态链接有没有办法包装 NvApi.lib 文件,以便我可以从 Visual Basic 调用它?PS 我在这里看到了一个名为 NvApi.net的项目这让我相信这是可能的,但该项目似乎不完整,并于 2009 年被放弃,而我需要的功能在 2010 年添加到 API 中。

编辑:

我能够让它工作。我在我的解决方案中添加了一个新的 Visual c++ CLR 类项目。在将 nvapi.lib 文件链接为依赖项并将 nvapi.h 文件添加到项目后,我能够为我需要的方法编写一个小包装器。下面是我使用的代码。它只允许我打开和关闭 3D 立体声。

#include "nvapi.h"

public ref class NvApiWrapper
{   
public: 
static bool NvApiWrapper_Initialize(){
    if (NvAPI_Initialize() == 0){
        return true;
    } else {
        return false;
    }
}

static bool NvApiWrapper_Stereo_Enable(){
    if (NvAPI_Stereo_Enable() == 0){
        return true;
    } else {
        return false;
    }
}

static bool NvApiWrapper_Stereo_Disable(){
    if (NvAPI_Stereo_Disable() == 0){
        return true;
    } else {
        return false;
    }
}
};
Run Code Online (Sandbox Code Playgroud)

dka*_*man 2

您需要创建一个静态链接到 .lib 的 c++/cli 包装器,然后公开 .net 类等。这正是 c++/cli 最方便的地方。

本教程有一个很好的演练(基于旧的托管 C++ 语法,但概念是相同的)