2012-08-16 42 views
3

我正在研究一个需要加载Nvidia的API NvApi.lib的VB.Net项目。不过Nvidia的网站上,它说:.net中的静态链接是不可能的?你可以用C++/CLI编写一个包装器吗?

“ NVAPI不能动态连接到应用程序,您必须创建一个静态链接库中,然后调用NvAPI_Initialize(),它加载动态nvapi.dll”

我的理解是.Net不支持静态链接是否有一种方法来包装NvApi.lib文件,以便我可以从Visual Basic调用它? P.S.我见过一个叫NvApi.net项目here这使我相信这是可能的,但该项目似乎不完整的,在2009年被放弃,我需要的功能被添加到API在2010年

编辑:

我能够得到它的工作。我在我的解决方案中添加了一个新的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; 
    } 
} 
}; 

回答

2

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

This tutorial有一个很好的演练(基于较旧的托管C++语法,但概念相同)

2

您可以创建一个C++/CLI dll,它静态链接到lib并包装它。 如果你已经从你的dll公开了一些适当的CLI接口,你应该可以从VB.net中调用这些接口。

相关问题