5

我正在开发一个需要加载 Nvidia 的 API NvApi.lib 的 VB.Net 项目。但是在 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;
    }
}
};
4

2 回答 2

2

您可以创建一个 C++/CLI dll,它静态链接到 lib,并将其包装起来。如果您随后从您的 dll 中公开了一些适当的 CLI 接口,那么您应该能够从 VB.net 调用这些接口。

于 2012-08-16T19:34:14.047 回答
2

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

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

于 2012-08-16T19:35:39.447 回答