从Visual Basic调用C ++ DLL

时间:2016-02-27 03:45:11

标签: c++ vb.net dll

我一直试图从Oculus Rift读取数据。我希望它在Visual Basic中工作,但唯一可用的代码在C ++中工作。所以我制作了一个从rift读取数据的C ++ DLL,我想在VB中使用它。问题是我不太清楚我在做什么,所以如果你能记住我是一个真正的菜鸟,那就太好了。

我使用了这个关于如何创建DLL的内容:https://www.youtube.com/watch?v=XdSbp1A6eQc

这是从rift读取数据的C ++代码:

#include <iostream>
#include "OVR_CAPI_D3D.h"
#include "Extras/OVR_Math.h"

using namespace std;
using namespace OVR;

int main()
{
 ovrHmd HMD;
 ovrGraphicsLuid luid;
 ovr_Initialize(nullptr);
 ovr_Create(&HMD, &luid);
 ovrHmdDesc hmdDesc = ovr_GetHmdDesc(HMD);

   float yaw, pitch, roll;

  while (true)
 {
  double frameTime = ovr_GetPredictedDisplayTime(HMD, 0);
  double sensorSampleTime = ovr_GetTimeInSeconds();
  ovrTrackingState hmdState = ovr_GetTrackingState(HMD, frameTime, ovrTrue);
  ovrPosef thePose = hmdState.HeadPose.ThePose;
  Quatf(thePose.Orientation).GetYawPitchRoll(&yaw, &pitch, &roll);

  cout << "yaw: " << RadToDegree(yaw) << ", pitch: " << RadToDegree(pitch) << ", roll: " << RadToDegree(roll) << endl;
}

ovr_Destroy(HMD);
ovr_Shutdown();
}

我制作了另一个C ++程序并测试了DLL,然后检查出来了。 然后我创建了一个VB程序来导入DLL,但我无法使其工作:

Imports System.Runtime.InteropServices
Imports System


Module Module1
Private Declare Sub getriftinfo Lib "RiftDLL.dll" Alias "getriftdata" ()

Sub Main()
    getriftinfo()
End Sub

End Module

当我运行代码时,程序崩溃并显示一条控制台消息:  未处理的异常system.badimageformatexception尝试加载格式不正确的程序

另外,我不太确定把DLL放在哪里

谢谢你们!这意味着很多。

1 个答案:

答案 0 :(得分:0)

您确定这两个程序都是针对32位还是64位。如果你混合使用32位和64位库,可能会产生这种错误。

我认为你的权利可能是在错误的位置。通常,您可以将其包含在bin中,然后在Visual Studio的项目中包含该引用。

这个答案可能会对您有所帮助:https://social.msdn.microsoft.com/Forums/en-US/f228007d-35eb-4ab5-b541-c10ece3b980b/help-using-c-dll-functions-in-vbnet?forum=vblanguage